我是在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%没有改变。我错了吗?
答案 0 :(得分:3)
大多数时候应该没有区别,但技术上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
引起的更新错误级别。
答案 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.
也许不是搜索互联网,你可以学习规则。