if语句中的ERRORLEVEL无法正常工作[关闭]
Posted
技术标签:
【中文标题】if语句中的ERRORLEVEL无法正常工作[关闭]【英文标题】:ERRORLEVEL in if statement not works correctly [closed] 【发布时间】:2021-06-03 12:12:58 【问题描述】:在这个批处理文件中,ERRORLEVEL 显示正确(第一个选项返回 1,第二个返回 2):
@echo off
choice /C YN /M "Yes or No"
echo The actual errorlevel is: %ERRORLEVEL%
pause
exit
但是当我尝试使用if
语句时,会发生一些事情:
@echo off
choice /C YN /M "Yes or No"
if (%ERRORLEVEL% == 1) (echo You chose "Yes")
if (%ERRORLEVEL% == 2) (echo You chose "No")
pause
exit
这里没有显示任何消息...有什么帮助吗?我是不是做错了什么?
【问题讨论】:
在命令提示符窗口中键入if /?
并阅读帮助文本以找出正确的语法!
(1
永远不会等于 1)
斯蒂芬,感谢您注意到这一点。如果您不介意,我将其添加到我的答案中,更详细地解释了这种情况
【参考方案1】:
去掉括号:
if %ERRORLEVEL% == 1 echo You chose "Yes"
if %ERRORLEVEL% == 2 echo You chose "No"
说明
与 C、javascript 或 Python 等语言不同,批处理脚本中的括号表示 和
等代码块
因此,不需要也不应该使用它们围绕==
检查。如果您想要更复杂的表达式,您可能不得不将其拆分为多个if
命令,如in this article about if
所述
编辑:
Stephan 注意到:
在这种情况下,错误是由命令处理器引起的 理解
(
和)
作为比较字符串的一部分, 而不是作为特殊字符,所以解释 您的语句作为字符串(%ERRORLEVEL%
和1)
之间的比较 所以字符串“(1
”与“1)
”进行比较——它们不匹配 所以表达式为假,但不会产生错误,因为这是 技术上有效的语法(即使它不符合您的要求)您可以写
"%ERRORLEVEL%" == "1"
来消除您的意图, 但真正的括号不应该在这里使用
尽管echo
周围的括号在现代 Windows 上的这种特殊情况下应该可以工作...
if
或for
在同一行),以确保它们不会被理解为命令语法的一部分正在执行:
if %ERRORLEVEL% == 1 (
echo You chose "Yes"
)
Here 是对批处理脚本中括号的更透彻的解释。
关于exit
的补充说明:
除非您希望中止整个批处理执行,否则您不需要在脚本末尾添加exit
。
如果一个批处理脚本是从另一个批处理脚本call
ed,或者在子例程中,则这是相关的。
如果您想结束您的*.bat
文件或子例程的执行,请使用goto :eof
(注意冒号)- 这类似于在脚本的最后放置一个标签并使用goto
跳转到它。
但是,exit /b
允许退出脚本并将ERRORLEVEL
代码设置为指定值。这只会从运行子程序或批处理脚本中返回,而不是像普通的 exit
那样终止 cmd.exe
。
更多关于exit
的信息可以在here找到
【讨论】:
谢谢哥们,我很感激 不客气。基于 cmets,我在EDIT:
表示的部分中添加了更多细节以上是关于if语句中的ERRORLEVEL无法正常工作[关闭]的主要内容,如果未能解决你的问题,请参考以下文章