batch-file - 搜索文件并返回匹配最多的父目录的名称?
问题描述
假设我有一个这样的搜索掩码"*casting?00*"
,它应该对应于树中的一个目录,按文件名匹配的数量计算。如何仅返回文件名匹配最多的子目录?
解决方案
递归遍历子文件夹,计算每个子文件夹中的匹配文件(将它们保存到临时文件中以供进一步处理)。对其进行排序并得到最后一行,将计数器和文件夹名分开:
@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% ---
推荐阅读
- flutter - 如何在带有底部导航栏的导航抽屉中的索引 1 和 0 上设置相同的屏幕?
- android - 共享元素过渡 - 视图数
- async-await - .NET profiling api获取当前线程的父线程ID
- r - 如何在 geom_text 中一次显示科学和非科学数字?
- javascript - 太多的重新渲染。React 限制渲染次数防止死循环 | 反应原生
- java - 客户端/服务器套接字不适用于外部连接
- android - 如何使用改造将 android 设备连接到烧瓶服务器
- kotlin - 了解包含点后跟括号的 lambda 构造
- python - 定义一个可调用的“损失”函数
- git - git push 不适用于 git-for-window