Пакетный файл - подсчет количества файлов в папке и сохранение в переменной
Я очень новичок в этом. Пожалуйста, помогите мне
Я пытался написать пакетную программу для подсчета количества файлов в папке и назначить ее переменной и отобразить ее, чтобы убедиться, что она сохранена
пожалуйста, помогите мне с синтаксисом,
Благодарю вас заранее
-VK
Ответы
Ответ 1
Я собираюсь предположить, что вы не хотите считать скрытые или системные файлы.
Есть много способов сделать это. Все методы, которые я покажу, включают некоторую форму команды FOR. Существует много вариантов команды FOR, которые выглядят почти одинаково, но ведут себя совершенно по-разному. Это может сбить с толку новичка.
Вы можете получить помощь, набрав HELP FOR
или FOR/?
из командной строки. Но эта помощь немного загадочна, если вы не привыкли ее читать.
1) Команда DIR показывает количество файлов в каталоге. Вы можете передать результаты DIR в FIND, чтобы получить соответствующую строку, а затем использовать FOR/F, чтобы разобрать желаемое значение из строки. Проблема этого метода в том, что искомая строка должна меняться в зависимости от языка, используемого операционной системой.
@echo off
for /f %%A in ('dir ^| find "File(s)"') do set cnt=%%A
echo File count = %cnt%
2) Вы можете использовать DIR/B/ADHS
для DIR/B/ADHS
списка не скрытых/несистемных файлов без другой информации, передать результат в FIND для подсчета количества файлов и использовать FOR/F для чтения результата.
@echo off
for /f %%A in ('dir /a-d-s-h /b ^| find /v /c ""') do set cnt=%%A
echo File count = %cnt%
3) Вы можете использовать простое FOR для перечисления всех файлов и SET/A для увеличения счетчика для каждого найденного файла.
@echo off
set cnt=0
for %%A in (*) do set /a cnt+=1
echo File count = %cnt%
Ответ 2
mugume david answer не работает в пустой папке; Count равен 1 вместо 0 при поиске шаблона, а не всех файлов. Например *.xml
Это работает для меня:
attrib.exe /s ./*.xml | find /v "File not found - " | find /c /v ""
Ответ 3
@echo off
setlocal enableextensions
set count=0
for %%x in (*.txt) do set /a count+=1
echo %count%
endlocal
pause
Это лучшая.... ваша переменная: %count%
ПРИМЕЧАНИЕ. Вы можете изменить (*.txt
) на любое другое расширение файла для подсчета других файлов.....
Ответ 4
Перейдите в каталог и
attrib.exe /s ./*.* |find /c /v ""
ИЗМЕНИТЬ
Я предположил, что это будет легко обнаружить. использовать
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "batchfile.bat";
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Я запустил это, и переменная output
держала это
D:\VSS\USSD V3.0\WTU.USSD\USSDConsole\bin\Debug>attrib.exe /s ./*.* | find /c /v "" 13
где 13 - количество файлов. Он должен решить проблему
Ответ 5
Самый быстрый код для подсчета файлов с ЛЮБЫМИ атрибутами в папке %FOLDER%
и ее подпапках выглядит следующим образом. Код для сценария в файле командного сценария (пакетный).
@for /f %%a in ('2^>nul dir "%FOLDER%" /a-d/b/-o/-p/s^|find /v /c ""') do set n=%%a
@echo Total files: %n%.
Ответ 6
for /F "tokens=1" %a in ('dir ^| findstr "File(s)"') do echo %a
Результат:
C:\MyDir> for /F "tokens=1" %a in ('dir ^| findstr "File(s)"') do @set FILE_COUNT=%a
C:\MyDir> echo %FILE_COUNT%
4 // <== There your answer
Ответ 7
FOR /f "delims=" %%i IN ('attrib.exe ./*.* ^| find /v "File not found - " ^| find /c /v ""') DO SET myVar=%%i
ECHO %myVar%
Это основано на (намного) предыдущем сообщении, в котором указано, что счет будет неправильным для пустого каталога, если вы используете DIR, а не attrib.exe.
Для всех, кто застрял в синтаксисе для ввода команды в цикле FOR, заключите команду в одинарные кавычки (при условии, что она не содержит их) и удалите трубы с помощью <.pdf >
Ответ 8
Я использовал временный файл для этого в прошлом, как показано ниже.
DIR /B *.DAT | FIND.EXE /C /V "" > COUNT.TXT
FOR /F "tokens=1" %%f IN (COUNT.TXT) DO (
IF NOT %%f==6 SET _MSG=File count is %%f, and 6 were expected. & DEL COUNT.TXT & ECHO #### ERROR - FILE COUNT WAS %%f AND 6 WERE EXPECTED. #### >> %_LOGFILE% & GOTO SENDMAIL
)