我继承了一个批处理文件,在其中,我已经获得了以下命令 -
forfiles /s /c "cmd /c IF @ISDIR==TRUE rmdir @FILE /q" >> C:\Apps\%dt%\%dt%.log 2>&1
在日志中,我收到以下错误:
错误:系统找不到指定的文件。
如何设置else条件以便输出未找到的文件的名称,而不是错误消息?
答案 0 :(得分:4)
当在没有内容(没有文件,没有目录)的目录中执行时,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
是{{1}}。