6

我是在 Windows 上使用批处理的新手,并且对错误级别的使用有疑问。

我在 google 上引用了TechNet(Exit)和许多示例。

他们中的大多数都像这样使用 /b 和 %errorlevel%

if errorlevel 1 exit /b %errorlevel%

我想知道两者之间的区别

if errorlevel 1 exit /b

if errorlevel 1 exit /b %errorlevel%

我认为没有区别,因为 %errorlevel% 没有改变。我错了吗?

4

2 回答 2

6

TL;博士

大多数情况下应该没有区别,但从技术上讲,exit /b %errorlevel%exit /b你想要退出而不改变错误级别更糟糕。

分析

EXIT /B没有可选的 errorlevel 参数不会更改错误级别,因此作为独立命令,它完全等同于EXIT /B %errorlevel% 提供%errorlevel%解决当前错误级别的命令。

但在某些情况下它可能不会这样做:

  • 如果定义了一个名为的环境变量ERRORLEVEL,那么%errorlevel%总是解析为它的值(可以是任意的),而不是当前的错误级别。
  • 如果命令扩展被禁用,则%errorlevel%永远不会解析为当前的错误级别(如果已定义,它仍将读取具有该名称的环境变量的值)。CMD /E:OFF您可以通过使用并尝试启动命令提示符来验证这一点ECHO %errorlevel%
  • 生成的当前错误级别值%errorlevel%将在解析命令时固定,而不是在执行到达该表达式时固定。这可能会导致为更复杂的命令生成错误的值。例子:

    copy j:\not_existing q:\not_existing & echo %errorlevel%
    

    这不会产生与

    copy j:\not_existing q:\not_existing
    echo %errorlevel%
    

    因为在第一种情况下%errorlevel%不会产生由 failed 引起的更新错误级别copy

于 2014-06-11T09:06:22.560 回答
-5

您的任何代码都没有意义。他们都没有做任何事情。

类型

if /?

exit /?

我通过将errorlevel更改为0来更改您的代码以运行。这是输出。

C:\Users\user>if errorlevel 0 /b 0
'/b' is not recognized as an internal or external command,
operable program or batch file.

C:\Users\user>if errorlevel 0 /b
'/b' is not recognized as an internal or external command,
operable program or batch file.

C:\Users\user>if errorlevel 0 /b 9009
'/b' is not recognized as an internal or external command,
operable program or batch file.

也许您可以学习规则,而不是搜索互联网。

于 2014-06-11T09:08:28.553 回答