2015-11-23 2 views
-1

Я сейчас работаю, и мне было интересно, есть ли способ показать количество файлов в каждой папке (/ подпапке). Сделали бы мою работу намного прощеПодсчитайте количество файлов в папках

Если им с помощью CMD и хотят, чтобы сосчитать все папки файлов в каждой папке, я хочу, чтобы это выглядело как что-то вроде этого

C: \ Users \ Me \ Documents:

Folder1 - 10 файлов

Folder2 - 3 файлов

-> FolderInsideFolder2: 2 файла

папки 3: 9 файлов

Искал его, но, похоже, не нашел ответа на этот вопрос. Это даже возможно? Заранее спасибо

+0

Это сообщение может быть полезным https://rodolfovaraujo.wordpress.com/2012/05/17/count-number-of-files-using-command-prompt/ – Cyclonecode

ответ

0
@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 
+0

Молодцы, кроме возгласа (ы) в имени папки. Однако произойдет сбой, если есть папка или файл с именем 'file (s)'. Изменить '(ECHO! Dirname! %% a files & SET" dirname = ")' to '(If/I" %% b "==" file (s) "(ECHO! Dirname! %% a files & SET" dirname = ")) '. Из любопытства: почему не отображаются пустые папки, т. Е. '0 File (s)'? – JosefZ

+0

@JosefZ: FIxed, используя несколько иной метод. Работает с пустыми каталогами для меня. У вас есть навыки для устранения сбоя. У меня есть уверенность. – Magoo

Смежные вопросы