@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 комментариев: пересмотр 1 к проблеме поражения с directorynames, содержащей строку "файл (ы)", отвергая dir /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 строка, выбранная для сообщения о количестве файлов, начинается с двух пробелов (строка, сообщающая имя файла, соответствующее «файлам», начнет «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
Это сообщение может быть полезным https://rodolfovaraujo.wordpress.com/2012/05/17/count-number-of-files-using-command-prompt/ – Cyclonecode