带有或不带有errorlevel的Windows批处理退出选项b

时间:2014-06-11 08:59:27

标签: windows batch-file errorlevel

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

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

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

if errorlevel 1 exit /b %errorlevel%

我想知道

之间的区别
if errorlevel 1 exit /b

if errorlevel 1 exit /b %errorlevel%

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

2 个答案:

答案 0 :(得分:3)

TL; DR

大多数时候应该没有区别,但技术上exit /b %errorlevel%严格比exit /b更严重,如果你想要的是退出而不改变错误级别。

分析

没有可选的errorlevel参数的

EXIT /B不会更改错误级别,因此作为独立命令,它完全等同于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%不会产生由失败的copy引起的更新错误级别。

答案 1 :(得分:-1)

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

输入

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.

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