if if条件在forfiles循环内部

时间:2016-06-17 13:43:59

标签: batch-file

我继承了一个批处理文件,在其中,我已经获得了以下命令 -

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

在日志中,我收到以下错误:

  

错误:系统找不到指定的文件。

如何设置else条件以便输出未找到的文件的名称,而不是错误消息?

1 个答案:

答案 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}}。