Windows批处理退出选项b,无论错误级别如何。
TL;DR
大多数情况下,这两个选项没有区别,但从技术上讲,如果你想要退出而不改变错误级别,exit /b %errorlevel%
比exit /b
更差。
分析
没有指定可选的错误级别参数的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
而导致的更新错误级别。
最后一个问题可以通过启用和应用延迟变量扩展来解决,使用copy j:\not_existing q:\not_existing & echo !errorlevel!
...