首页 > 解决方案 > 搜索文件并返回匹配最多的父目录的名称?

问题描述

假设我有一个这样的搜索掩码"*casting?00*",它应该对应于树中的一个目录,按文件名匹配的数量计算。如何仅返回文件名匹配最多的子目录?

标签: batch-filecmd

解决方案


递归遍历子文件夹,计算每个子文件夹中的匹配文件(将它们保存到临时文件中以供进一步处理)。对其进行排序并得到最后一行,将计数器和文件夹名分开:

@echo off
setlocal enabledelayedexpansion
del tmp.csv 2>nul
for /r /d %%a in (*) do (
set "count="
  for /f %%b in ('dir /b "%%a\*casting?00*" 2^>nul ^|find /c /v ""') do (
  set "count=    %%b"
  echo !count:~-4!,%%a >>tmp.csv
     )
)

sort tmp.csv

for /f "tokens=1,* delims=, " %%a in ('sort tmp.csv') do set "folder=%%b" & set "count=%%a"
echo --- %count% findings in %folder% ---

注意:如果多个文件夹具有相同的最大值。匹配文件的数量,这只会给你最后一个。

编辑以使用数组而不是文件(在我看来可读性较差,但只是为了展示它是如何完成的):

@echo off
setlocal enabledelayedexpansion
set index=0
for /r /d %%a in (*) do (
  set "count="
  set /a index+=1
  for /f %%b in ('dir /b "%%a\*casting?00*" 2^>nul ^|find /c /v ""') do (
    set "count=    %%b"
    set "Array[!index!]=!count:~-4!,%%a
  )
)
set Array
for /f "tokens=1,* delims=, " %%x in (
    '(for /f "tokens=2 delims==" %%a in ('set Array'^) do @echo %%a^)^|sort'
  ) do set "count=%%x" & set "folder=%%y"
echo --- %count% findings in %folder% ---

推荐阅读