jwc*_*hoi 5 windows batch-file errorlevel
我是在 Windows 上使用批处理的新手,对 errorlevel 的使用有疑问。
我在谷歌上引用了TechNet(Exit)和许多示例。
他们中的大多数人像这样使用 /b 和 %errorlevel%
if errorlevel 1 exit /b %errorlevel%
Run Code Online (Sandbox Code Playgroud)
我想知道两者之间的区别
if errorlevel 1 exit /b
Run Code Online (Sandbox Code Playgroud)
和
if errorlevel 1 exit /b %errorlevel%
Run Code Online (Sandbox Code Playgroud)
我认为没有区别,因为 %errorlevel% 没有改变。我错了吗?
大多数情况下应该没有区别,但从技术上讲,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%
Run Code Online (Sandbox Code Playgroud)
这不会产生与
copy j:\not_existing q:\not_existing
echo %errorlevel%
Run Code Online (Sandbox Code Playgroud)
因为在第一种情况下%errorlevel%不会产生由失败导致的更新错误级别copy。