2016-06-17 5 views
1

Я унаследовал пакетный файл, и в нем, я получил следующую команду -если иное условие внутри цикла Forfiles

forfiles /s /c "cmd /c IF @ISDIR==TRUE rmdir @FILE /q" >> C:\Apps\%dt%\%dt%.log 2>&1 

В журнале, я получаю следующее сообщение об ошибке:

ERROR: The system cannot find the file specified.

Как я могу поместить условие else, чтобы оно вывело имя файла, который не найден, вместо сообщения об ошибке?

ответ

3

Ошибка Ther исходит от forfiles, когда он выполняется в каталоге без содержимого (без файлов и без каталогов). Помните, что forfiles ищет текущий рабочий каталог, если ни один путь не указан явно с помощью переключателя /P, а маска поиска по умолчанию равна *, если переключатель /M не указан, поэтому соответствует всем элементам. Таким образом, ошибка, с которой вы сталкиваетесь, может произойти только с пустым рабочим каталогом.
Ошибка не имеет ничего общего с запросом if @isdir==TRUE.

Если вы хотите конкретное сообщение, чтобы появиться в журнале, вы можете проверить ErrorLevel состояния после того, как forfiles была выполнена, что 1 в случае никаких пунктов не соответствуют критериям поиска, и 0, если хотя бы один элемент соответствует:

forfiles /S /C "cmd /C if @isdir==TRUE rmdir @file" || echo "%CD%" is empty. >> "C:\Apps\%dt%\%dt%.log" 2> nul 

Об этом пишет сообщение "%CD%" is empty в журнал с %CD% заменяется текущей директории.
2> nul подавляет сообщение об ошибке ERROR: The system cannot find the file specified..
Оператор || условно объединяет команды и позволяет выполнять только один, только если левый успешно завершен, что означает, что ErrorLevel - 0.

+0

спасибо @aschipfl! – sharcfinz

Смежные вопросы