带或不带errorlevel的Windows批处理退出选项b
我是在Windows上使用批处理的新手,对errorlevel的使用有疑问 我在谷歌上引用了很多例子 大多数使用了%errorlevel%的/b,如下所示带或不带errorlevel的Windows批处理退出选项b,windows,batch-file,errorlevel,Windows,Batch File,Errorlevel,我是在Windows上使用批处理的新手,对errorlevel的使用有疑问 我在谷歌上引用了很多例子 大多数使用了%errorlevel%的/b,如下所示 if errorlevel 1 exit /b %errorlevel% 我想知道两者之间的区别 if errorlevel 1 exit /b 及 我认为没有区别,因为%errorlevel%没有改变。我错了吗?TL;博士 大多数情况下应该没有区别,但是如果您希望在不更改错误级别的情况下退出,那么从技术上讲,exit/b%errorle
if errorlevel 1 exit /b %errorlevel%
我想知道两者之间的区别
if errorlevel 1 exit /b
及
我认为没有区别,因为%errorlevel%没有改变。我错了吗?TL;博士
大多数情况下应该没有区别,但是如果您希望在不更改错误级别的情况下退出,那么从技术上讲,exit/b%errorlevel%
要比exit/b
差得多
分析
EXIT/B
如果没有可选的errorlevel参数,则不会更改错误级别,因此作为一个独立命令,只要%errorlevel%
解析为当前错误级别,它就完全等同于EXIT/B%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%
复制引起的更新错误级别
- 您的代码都没有意义。他们没有一个人做任何事
类型
及
通过将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.
也许你不必在网上搜索,而可以学习规则。现在有人编辑了你的问题,阅读该行时,%errorlevel%将展开。对errorlevel所做的任何更改都不会影响该行;很明显,我们在这里讨论的是
exit/b
(例如,这就是TechNet文章的内容)。if errorlevel
与if%errorlevel%=
不同。如果errorlevel,您永远不会使用%errorlevel%代替。大多数情况下,它的工作原理是一样的。正如另一张海报所指出的,情况并不总是一样的。即使没有改变,行为上也有细微的差别。我使用的命令只是批处理命令的一部分。我知道单独使用“如果”或“退出”是没有意义的。一定还有其他一些命令会影响“%errorlevel%”。很抱歉,这个“答案”对讨论没有任何帮助,并且通过告诉新手“阅读规则”来贬低他们(SO和批处理主题)似乎没有帮助。显然,他们已经做了一些研究,techNet链接(包括“/?”帮助参数)证明了这一点,并且对文章或命令行帮助中未涉及的行为提出了合理的问题-1最后一项可以通过使用copy j:\not\u existing q:\not\u existing&echo启用和应用来解决!错误等级代码>…
if /?
exit /?
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.