Нужна помощь в написании командного файла - PullRequest
0 голосов
/ 23 октября 2018

Путь к папке и формат поступают на вход файла пакетного файла (например, txt) (как параметры пакетного файла).Папка должна содержать разные файлы.Если такой папки не существует, напишите «Эта папка не существует» и завершите работу программы.Если такая папка существует, то найдите в ней все и в ее подпапках файлы указанного расширения, для которых установлен атрибут архива.Выведите количество таких файлов в консоли

[Редактировать /]

Вот что у меня есть:

@echo off
if not exist %1 (echo "This folder does not exist" && pause && exit /B )
set /a count=0
for %%i in (dir %1\*.%2 /A:A /S ) do ( set /a count+=1 )
Echo in the folder %1, found %count% files with extension %2 and attribute 
Archive
pause

Окончательный счет неверенenter image description here

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Это в командном файле работает для меня.Одна из проблем заключается в том, что без параметра / B он также считает дополнительные записи, возвращающиеся для каталогов.Ваше текущее «for» фактически считает части инструкции внутри него, а не фактический результат выполнения команды.

@echo off
cls
SETLOCAL EnableDelayedExpansion
if not exist %1 (echo "This folder does not exist" && pause && exit /B )
set /a count=0
for /f "tokens=*" %%G in ('dir "%1\*.%2" /A:A /S /B') do (
    set /a count+=1
)
Echo in the folder %1, found %count% files with extension %2 and attribute Archive
pause
0 голосов
/ 23 октября 2018

Ваша строка for %%i in (dir %1\*.%2 /A:A /S ) do ... неверна в нескольких отношениях.

Вы хотите обработать вывод команды: добавьте /f и введите в кавычки команду.

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

, если в ваших параметрах есть пробелы, произойдет сбой: используйте %~n удалить все окружающие кавычки и указать полный путь.

Таким образом, в целом, строка, вероятно, должна быть:

for /f %%i in ('dir /b "%~1\*.%~2" /A:A /S') do ...

См. for /? и dir /? для получения подробной информации.

(а точнее, вы должны также добавить "delims=", чтобы получить все имя файла вместо его первого слова, но, поскольку вы просто подсчитываете строки, это ничего не изменит)

Другойвещь: if not exist %1 (echo "This folder does not exist" является неоптимальным. Если параметр не был задан, %1 пусто, if приводит к if not exist (echo (попытка найти файл с именем (echo, и команда, которая будет выполнена, будет "This folder does not exist"что приводит к сообщению об ошибке '"This folder does not exist"' is not recognized as an internal or external command, operable program or batch file.

Безопасный синтаксис: if not exist "%~1" (echo ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...