Обход папок и подсчет файлов
Как можно пройти через папку и ее подпапки (каталог и его подкаталоги) и перечислить, сколько файлов с определенным расширением содержится в них в общей сложности, для каждого расширения, которое встречается в этих папках?
Используйте следующие 3 пакетных файла.
Заметки:
- В настоящее время не учитываются файлы без расширения (что оказалось вне краткости вопроса).
- Некоторые файлы могут быть подсчитаны несколько раз, если 8.3 имена не отключены.
Total.cmd:
@echo off
setlocal enabledelayedexpansion
rem count directories
call CountDirs
rem get list of extensions
for /f "usebackq" %%i in (`dir /a:-d /b /s`) do (
set _extension=%%~xi
if [!_extension!] neq [] echo !_extension:~1! >> %temp%\extensions
)
rem get list of unique extensions
set _last=
for /f "usebackq" %%j in (`sort %temp%\extensions`) do (
set _this=%%j
if [!_last!] neq [!_this!] echo !_this! >> %temp%\unique
set _last=%%j
)
rem count the files
for /f %%k in (%temp%\unique) do (
call CountFiles %%k
)
rem cleanup
if exist %temp%\extensions del %temp%\extensions
if exist %temp%\unique del %temp%\unique
endlocal
CountDirs.cmd:
@echo off
rem count directories
dir /a:d /b /s | find "" /c /v > %temp%\count
set /p _count=<%temp%\count
rem cleanup
del %temp%\count
echo folders %_count% total
CountFiles.cmd:
@echo off
rem count files matching %1
dir /b *.%1 /s 2> nul | find "" /v /c > %temp%\count
set /p _count=<%temp%\count
rem cleanup
del %temp%\count
echo .%1 %_count% total
Пример вывода:
F:\test>Total.cmd
folders 15 total
.1 1 total
.bat 1 total
.cmd 10 total
.csv 6 total
.exe 4 total
.html 1 total
.java 1 total
.jpg 1 total
.js 1 total
.mak 1 total
.php 1 total
.ps1 1 total
.sh 1 total
.txt 19 total
.txt1 2 total
.zip 1 total
F:\test>
Дальнейшее чтение
- Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
- dir - Показать список файлов и подпапок.
- enabledelayedexpansion - отложенное расширение приведет к тому, что переменные будут расширяться во время выполнения, а не во время анализа.
- for /f - Циклическая команда против результатов другой команды.
- if - Условно выполнить команду.
- параметры - аргумент командной строки (или параметр) - это любое значение, переданное в пакетный скрипт.
- set - отображать, устанавливать или удалять переменные окружения CMD. Изменения, сделанные с помощью SET, будут сохраняться только в течение текущего сеанса CMD.