пакетный файл - подсчет количества файлов в папке и сохранение в переменной

Я очень новичок в этом. пожалуйста, помогите мне

Я пытался написать программу пакетного файла, чтобы подсчитать количество файлов в папке и назначить это переменной и отобразить ее, чтобы убедиться, что она была сохранена пожалуйста, помогите мне с синтаксисом,

заранее спасибо -VK

Ответы на вопрос(8)

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's your answer

чтобы сделать это в прошлом, как это показано ниже.

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
)
@echo off
setlocal enableextensions
set count=0
for %%x in (*.txt) do set /a count+=1
echo %count%
endlocal
pause

%count%

ПРИМЕЧАНИЕ: вы можете изменить (*.txt) к любому другому расширению файла для подсчета других файлов .....

Есть много способов сделать это. Все методы, которые я покажу, включают в себя некоторую форму команды 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 /A-D-H-S чтобы вывести список не скрытых / несистемных файлов без другой информации, передайте результат в 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%
 09 авг. 2018 г., 15:56
Как вы указываете каталог, в котором вы хотите рассчитывать в первом методе?
 09 авг. 2018 г., 16:11
@LoukMo - Ответ предполагает текущий каталог. Чтобы указать другую папку, просто введите путь после команды DIR.

Перейдите в каталог и;

attrib.exe /s ./*.* |find /c /v ""
EDIT

Я предположил, что это будет легко обнаружить. использование

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 - количество файлов. Это должно решить проблему

 18 мая 2013 г., 18:02
ОП не просил подсчитывать файлы в подпапках, поэтому я не вижу причин для/s вариант. ОП запросил, чтобы результат был сохранен в переменной, а ваш код этого не делает.
 21 мая 2013 г., 20:34
я отредактировал свой ответ
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, заключите команду в одинарные кавычки (при условии, что она не содержит их) и экранируйте каналы с помощью ^.

Mugume Дэвид ответ происходит сбой в пустой папке; Счетчик равен 1 вместо 0 при поиске шаблона, а не всех файлов. Например * .xml

Это работает для меня:

attrib.exe /s ./*.xml | find /v "File not found - " | find /c /v ""

%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%.

Ваш ответ на вопрос