Batch file 将CHOICE与CMD脚本一起使用

Batch file 将CHOICE与CMD脚本一起使用,batch-file,cmd,errorlevel,Batch File,Cmd,Errorlevel,无法使此选择脚本正常工作。有人能提供一些见解吗 @echo off CHOICE /C:IRCQSH /T 10 /N /M "Waiting with choice..." /D H IF ERRORLEVEL 0 ECHO "Default choice: Health" IF ERRORLEVEL 1 ECHO "Install" IF ERRORLEVEL 2 ECHO "Remove" IF ERRORLEVEL 3 ECHO "Console" IF ERRORLEVEL 4 E

无法使此选择脚本正常工作。有人能提供一些见解吗

@echo off

CHOICE /C:IRCQSH /T 10 /N /M "Waiting with choice..." /D H

IF ERRORLEVEL 0 ECHO "Default choice: Health"
IF ERRORLEVEL 1 ECHO "Install"
IF ERRORLEVEL 2 ECHO "Remove"
IF ERRORLEVEL 3 ECHO "Console"
IF ERRORLEVEL 4 ECHO "Quit"
IF ERRORLEVEL 5 ECHO "Start"
IF ERRORLEVEL 6 ECHO "Health"

pause

您需要更改语法以将
ERRORLEVEL
视为变量,并使用CMD equality语句,例如:

IF %ERRORLEVEL% EQU 0 ECHO "Default choice: Health"
IF %ERRORLEVEL% EQU 1 ECHO "Install"
IF %ERRORLEVEL% EQU 2 ECHO "Remove"
IF %ERRORLEVEL% EQU 3 ECHO "Console"
IF %ERRORLEVEL% EQU 4 ECHO "Quit"
IF %ERRORLEVEL% EQU 5 ECHO "Start"
IF %ERRORLEVEL% EQU 6 ECHO "Health"
代码失败的原因来自:

IF ERRORLEVEL n语句的读取方式应与ERRORLEVEL>=number一样

i、 e

如果ERRORLEVEL为64,则ERRORLEVEL 0将返回TRUE

这里有几点:

  • 默认选项不会返回ERRORLEVEL为零,而是返回所选选项的编号。在您的情况下,即H,默认值等于按H键,错误级别为6
  • 正如Littlebbytables在回答中所说的那样,获取ERRORLEVEL值的正确方法是将其包含在百分比中并使用EQU比较。然而,还有其他方法可以达到同样的效果
  • IF ERRORLEVEL Number命令
    测试ERRORLEVEL值是否大于或等于给定的数字,因此您也可以使用以下表格:

  • 也许实现相同目的的最简单方法是定义一个数组,并使用errorlevel值作为索引显示适当的元素:


有关批处理阵列的进一步说明,请参阅:

Woah!我不知道!我以前读过几次那个url链接,但不知怎么的,我略过了它;很容易错过。在过去,我使用了“%ERRORLEVEL%”==“0”,这与使用eq right相同?这将对“0”==“0”而不是0==0进行字符串比较,但是是的,它应该完成相同的操作。
@echo off

CHOICE /C:IRCQSH /T 10 /N /M "Waiting with choice..." /D H

FOR %%E IN (6 5 4 3 2 1) DO IF ERRORLEVEL %%E GOTO LABEL-%%E

:LABEL-1 
ECHO "Install"
GOTO CONTINUE

:LABEL-2
ECHO "Remove"
GOTO CONTINUE

:LABEL-3
ECHO "Console"
GOTO CONTINUE

:LABEL-4
ECHO "Quit"
GOTO CONTINUE

:LABEL-5
ECHO "Start"
GOTO CONTINUE

:LABEL-6
ECHO "Health"

:CONTINUE
pause
@echo off
setlocal EnableDelayedExpansion

rem Create an array with the desired messages (selected by numeric index)
set index=0
for %%a in ("Install" "Remove" "Console" "Quit" "Start" "Health") do (
   set /A index+=1
   set elem[!index!]=%%a
)

CHOICE /C:IRCQSH /T 10 /N /M "Waiting with choice..." /D H
echo !elem[%ERRORLEVEL%]!
pause