【问题标题】:Batch File - REN command's ErrorLevel returns 0 even on failure批处理文件 - 即使失败,REN 命令的 ErrorLevel 也会返回 0
【发布时间】:2011-02-05 07:03:06
【问题描述】:

这与我之前的问题有关。

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。

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

如何最好地做到这一点?

谢谢。

【问题讨论】:

标签: command-line batch-file rename


【解决方案1】:

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

您的代码的问题是,对于等于或大于 N 的任何数字,表达式 IF ERRORLEVEL N 的计算结果为 true

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

IF NOT ERRORLEVEL 1 (
   REM your code here
)

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

IF ERRORLEVEL 1 EXIT /B

【讨论】:

    【解决方案2】:

    您还可以创建一个 rem.bat,它会调用类似这样的错误级别 IF ERRORLEVEL==300 call rem.bat 或者您可以使用级别 0 使每个错误级别都可解锁。您可以使用 varrie在某些事情上,它不仅会使应用程序运行更流畅,而且不会造成任何滞后,因为您的风扇速度将保持不变,因为错误级别将使用更多的 CPU 使用率。

    【讨论】:

    • 这个答案对我来说是不可理解的。请进一步解释。
    【解决方案3】:

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

    【讨论】:

    • 在什么环境下?我在 Windows 7 (x64) 下对其进行了测试,它确实有效:一个不成功的ren 命令将ERRORLEVEL 设置为1。这是一个非常简单的代码:pastebin.com/z1EBZ2Em。我创建了 2 个测试文件,重命名它们会导致“拒绝访问”或“系统找不到指定的文件”。错误,他们都将ERRORLEVEL 设置为1。看这个截图(第一次asdsad.txt可以成功重命名,设置ERRORLEVEL为0):i.imgur.com/BQb2Ydg.png。那你在哪里测试的?如果发生故障,REN 应将 ERRORLEVEL 设置为 1。
    • @Sk8erPeter 我在 XPSP3 下测试了您的批处理代码,是的,它似乎工作正常。老实说,我不知道我的cmets是基于什么的。我一直在一个破烂的环境中工作。
    • 我真的不明白为什么@FMFF 接受了这个答案...:D
    猜你喜欢
    • 2021-09-24
    • 2014-09-07
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 2016-06-23
    相关资源
    最近更新 更多