在这个批处理文件中,正确地显示了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这里没有显示任何信息.有帮助吗?我做错什么了吗?
发布于 2021-03-04 20:51:01
删除括号:
if %ERRORLEVEL% == 1 echo You chose "Yes"
if %ERRORLEVEL% == 2 echo You chose "No"解释
与C、Javascript或Python等语言不同,批处理脚本中的括号表示像{和}这样的代码块
因此,不需要将它们放在==检查周围,也不应该使用它们。如果您想要更复杂的表达式,则可能必须将其拆分为几个if命令,如概述的if。
编辑:
正如Stephan所注意到的: 在这种情况下,错误的原因是命令处理程序将
(和)理解为比较字符串的一部分,而不是特殊字符,因此将语句解释为字符串(%ERRORLEVEL%和1)之间的比较--因此字符串"(1“与"1)”不匹配,因此表达式是假的,但错误不会生成,因为这在技术上是有效的语法(尽管它不能满足您的需要)。 您可以编写"%ERRORLEVEL%" == "1"来消除您的意图的歧义,但实际上这里不应该使用括号。
虽然echo周围的括号在现代Windows上应该适用于这种特殊情况.
if或for相同的行),以确保它们不被理解为您正在执行的命令的语法的一部分:if %ERRORLEVEL% == 1 (
echo You chose "Yes"
)这里是对批处理脚本中括号的更全面的解释。
关于exit的附加说明
除非您希望中止整个批处理执行,否则在脚本末尾不需要exit。
如果一个批处理脚本是从另一个批处理脚本中编辑的,或者是在一个子例程中编辑的,这是相关的。
如果您想结束*.bat文件或子例程的执行,请使用goto :eof (请注意冒号)--这类似于在脚本的末尾放置一个标签,然后使用goto跳转到它。
但是,exit /b允许退出脚本并将ERRORLEVEL代码设置为指定的值。这只会从运行子例程或批处理脚本返回,而不会像普通的cmd.exe那样终止exit。
有关exit的更多信息可以找到这里
https://stackoverflow.com/questions/66481955
复制相似问题