我正在编写一个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.
)
)
答案 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)