在FOR循环中使用FORFILES并尝试覆盖错误

时间:2019-05-27 13:19:31

标签: batch-file batch-processing

我正在编写一个for循环,以在.xml和.psr文件上执行forfiles命令。当前,如果找到一种文件类型而不找到另一种文件类型,它将显示“错误:找不到具有指定搜索条件的文件”,但是我希望该错误说明未找到哪种文件类型。我在for循环中有一个if语句,该语句应该覆盖该错误,但是它不起作用。这是循环:

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 个答案:

答案 0 :(得分:1)

标准delayed expansion错误-您需要调用延迟扩展[关于该问题的数百篇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)