Использование FORFILES в цикле FOR и попытка переопределить ошибку - PullRequest
0 голосов
/ 27 мая 2019

Я пишу цикл for для выполнения команды forfiles в файлах .xml и .psr.В настоящее время, если он находит один тип файла, но не другой, он будет отображать «ОШИБКА: файлы не найдены с указанными критериями поиска», но я хочу, чтобы ошибка указала, какой тип файла не был найден.У меня есть оператор if внутри цикла for, который должен переопределить ошибку, но он не работает.Вот цикл:

FOR %%G IN (.xml, .psr) DO (
    FORFILES /P "%xmlDir%" /M *%%G /D -%days% /C "CMD /C DEL @FILE"
    IF %ERRORLEVEL% NEQ 0 (
        ECHO No matches found for %%G files older than %days% days
    )
)

Редактировать: Спасибо за ответы.Мой цикл for теперь работает как задумано и в итоге выглядит так:

FOR %%G IN (.xml, .psr) DO (
    FORFILES /P "%xmlDir%" /M *%%G /D -%days% /C "CMD /C DEL @FILE" >nul 2>nul
    IF ERRORLEVEL 1 (
        ECHO No %%G files %days% days old or older were found.
    ) ELSE (
        ECHO %%G files as old as %days% days or older have been deleted.
    )
)

1 Ответ

1 голос
/ 27 мая 2019

Стандартная delayed expansion ошибка - Вам необходимо вызвать delayedexpansion [сотни статей SO об этом - используйте функцию поиска], чтобы отобразить или использовать значение времени выполнения любой переменной, которая была изменена в серии инструкций в скобках ( он же «блок кода»).

IF %ERRORLEVEL% NEQ 0 (

является проблемой - errorlevel заменяется его значением, когда встречается for.

Самый простой способ - использовать обычную обработку errorlevel:

if errorlevel 1 (

т. если errorlevel (1 или больше 1)

Что касается сообщения, попробуйте 2>nul, чтобы перенаправить сообщения об ошибках на nul ИЛИ использовать

if exist "%xmldir%\%%G" (forfiles...
 ) else (echo no %%G files found)
...