@ECHO OFF
SETLOCAL enabledelayedexpansion
SET "sourcedir=."
SET "dirname="
FOR /f "tokens=1,2,*delims= " %%a IN (
'dir /s "%sourcedir%\*" ^|findstr /i "\ file(s)"'
) DO (
IF DEFINED DIRNAME (ECHO !dirname! %%a files&SET "dirname=") ELSE (SET "dirname=%%c")
)
GOTO :EOF
您需要更改sourcedir 的设置以适应您的情况。
此代码会为包含一些特殊字符(如!)的目录名生成不正确的目录名,但对于字母数字应该没问题。
如果碰巧有一个包含字符串file(s)的文件名,无疑会失败。
作为一个又快又脏的版本,你可以试试
'dir /s "%sourcedir%\*" |findstr /i "\ file(s)"'
其中%sourcedir%替换为您的目标目录的名称。
遵循 JosefZ cmets:修订版 1,通过拒绝包含
的
dir /s 行来解决包含字符串“file(s)”的目录名问题
@ECHO OFF
SETLOCAL enabledelayedexpansion
SET "sourcedir=."
SET "dirname="
FOR /f "tokens=1,2,*delims= " %%a IN (
'dir /s "%sourcedir%\*" ^|find /v "<" ^|findstr /i "\ file(s)"'
) DO (
IF DEFINED DIRNAME (ECHO !dirname! %%a files&SET "dirname=") ELSE (SET "dirname=%%c")
)
GOTO :EOF
修订版 2 确保选择报告文件数量的 original 行以两个空格开头(报告文件名匹配“file(s)”的行将以 "nn" 或 "n" 开头,其中 n 是数字)
@ECHO OFF
SETLOCAL enabledelayedexpansion
SET "sourcedir=."
SET "dirname="
FOR /f "delims=" %%A IN (
'dir /s "%sourcedir%\*" ^|find /v "<" ^|findstr /i "\ file(s)"'
) DO (
FOR /f "tokens=1,2,*delims= " %%a IN ("%%A") DO (
IF DEFINED DIRNAME (
SET "line=%%A"
IF "!line:~0,2!"==" " (ECHO !dirname! %%a files&SET "dirname=")
) ELSE (SET "dirname=%%c")
)
)
GOTO :EOF