Как подсчитать все файлы заданного типа (например, *.mp3) в указанной папке (и, при необходимости, в подпапках) из командной строки в переменную среды?
(пожалуйста, без PowerShell, только пакетные команды)
решение1
set filesCount=0 & for %f in (*) do @(set /a filesCount+=1 > nul)
решение2
Подсчет файлов в папке и подпапках
Используйте следующую команду:
dir /b *.mp3 /s 2> nul | find "" /v /c > tmp && set /p count=<tmp && del tmp && echo %count%
Переменная среды %count%
будет содержать количество файлов.
Примечание:
- Удалите
/s
, если не хотите учитывать файлы во вложенных папках.
Пример (с использованием *.txt)
Список каталогов, показывающий 17 файлов:
F:\test>dir /b *.txt /s
F:\test\abc.txt
F:\test\blackwhite.txt
F:\test\cpu.txt
F:\test\interface.txt
F:\test\Lorem ipsum.txt
F:\test\right.txt
F:\test\rights.txt
F:\test\software.txt
F:\test\tabs.txt
F:\test\test.txt
F:\test\this is inside junction.txt
F:\test\unique.txt
F:\test\xyz.txt
F:\test\sub\abc.txt
F:\test\sub\xyz.txt
F:\test\sub with space\junction sub with space.txt
F:\test\sub with space\xyz.txt
Выполните команду:
F:\test>dir /b *.txt /s 2> nul | find "" /v /c > tmp && set /p count=<tmp && del tmp && echo %count%
17
дальнейшее чтение
- Индекс AZ командной строки Windows CMD- Отличный справочник по всем вопросам, связанным с командной строкой Windows.
- находить- Поиск текстовой строки в файле и отображение всех строк, где она найдена.
решение3
Используйте комбинацию dir
и find
для подсчета файлов. Сохраните файлы в переменной через for
цикл. Перенаправьте вывод ошибок в , чтобы nul
скрыть File Not Found
ошибку.
@echo off
for /f %%i in ('dir *.xlsx /s /b 2^> nul ^| find "" /v /c') do set VAR=%%i
echo %VAR%
См. описания параметров, используемых /?
для dir
, find
, и for
.
решение4
Вы можете воспользоваться /L
опцией robocopy (list). Тогда вам не нужны никакие сложные циклы for или конвейеры. Это также очень быстро.
robocopy c:\mydir c:\dummy /L /E *.mp3 *.txt
c:\mydir
: замените это на путь к каталогу, в котором вы хотите выполнить поискc:\dummy
: вы можете оставить это, это просто фиктивный аргумент, который игнорируется, поскольку мы используем/L
/L
: только список, ничего не копируется/перемещается./E
: включить подкаталоги рекурсивно. Вы можете удалить это, если не хотите искать подкаталоги.- Если вы не хотите печатать список файлов и каталогов, вы можете добавить
/NFL
(Нет списка файлов) и/или/NDL
(Нет списка каталогов)
Вы получите хороший отчет, как показано ниже. Просто посмотрите на Total
столбец.
Source : c:\mydir
Files : *.mp3
*.txt
--------------------------------------------------
{list of all the matching files}
--------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 5 5 0 0 0 0
Files : 89 89 0 0 0 0
Bytes : 3.485 g 3.485 g 0 0 0 0