Подтвердить что ты не робот

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

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

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

Благодарю вас заранее -VK

4b9b3361

Ответ 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
)