这里有几点:
- 默认选项不返回 ERRORLEVEL 为零,而是返回所选选项的编号。在您的情况下,即 H,默认等于按 H,ERRORLEVEL 为 6
- 正如 LittleBobbyTables 在他的回答中所说,获取 ERRORLEVEL 值的正确方法是将其括在百分比中并使用 EQU 比较。但是,还有其他方法可以达到相同的结果。
- 测试
IF ERRORLEVEL Number Command
errorlevel 值是否大于或等于给定数字,因此您也可以使用以下形式:
.
@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
- 也许实现相同目的的最简单方法是定义一个数组并使用 errorlevel 值作为索引显示适当的元素:
.
@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
有关 Batch 数组的进一步说明,请参见:cmd.exe (batch) 脚本中的数组、链表和其他数据结构