批处理文件 - 即使发生故障,REN命令的ErrorLevel也会返回0

时间:2010-04-07 14:11:53

标签: command-line batch-file rename

这与我之前的问题有关。

ren "C:\Temp\%%A" "%%A"
if errorlevel 0 (
          "C:\Program Files\7-Zip\cmdline\7za.exe" a -tzip -mx9 "C:\temp\Zip\%%A.zip" "C:\temp\%%A"
           Move "C:\temp\%%A" "C:\Temp\Archive"
                )

在上面,即使REN命令失败,IF总是会评估为true。

想法是检查文件是否未被任何其他应用程序锁定,如果没有,则将其归档并将其移动到其他位置。

如何做到最好?

谢谢。

3 个答案:

答案 0 :(得分:5)

在命令行上键入help if以获取有关错误级别处理的一些信息。

您的代码存在的问题是,对于任何等于或大于IF ERRORLEVEL N

的数字,表达式N的计算结果为true

通常只有ERRORLEVEL 0表示成功,任何其他(更大)值表示某些错误。要简单地检查,如果还没有发生错误,请将检查反转为:

IF NOT ERRORLEVEL 1 (
   REM your code here
)

或作为替代方案,退出脚本:

IF ERRORLEVEL 1 EXIT /B

答案 1 :(得分:-1)

你也可以制作一个rem.bat,它会让错误级别调用类似这样的错误:ERRORLEVEL == 300调用rem.bat,或者你可以通过使用0级别来解锁每个错误级别。你可以varrie关于事情不仅会使应用程序运行更加平稳,而且它会使你的风扇速度保持不变,因为错误级别将使用更多的CPU使用。

答案 2 :(得分:-1)

REN是内部命令,不设置ERRORLEVEL(我正在寻找相同的答案here