批处理 ERRORLEVEL 无法正常工作

Batch ERRORLEVEL not working properly

我使用批处理有一段时间了,最​​近 运行 遇到了一个我从未遇到过的问题,涉及 ERRORLEVELS。

这是我为展示错误而制作的一个简短程序。

@echo off
title Choices
CMD /C EXIT 0
echo [1] Choice 1
echo [2] Choice 2
echo [3] Choice 3
choice /c 123 /n 
IF ERRORLEVEL 1 GOTO ONE
IF ERRORLEVEL 2 GOTO TWO
IF ERRORLEVEL 3 GOTO THREE
echo Nice you broke it
pause
exit
:ONE
echo CONGRATS YOU CHOSE 1
pause
exit
:TWO
echo NICE YOU CHOSE 2
pause
exit
:THREE
echo OOH YOU CHOSE 3
pause
exit

它非常简单,您只需按一个数字,它就会显示您按的是什么数字。问题是无论我按什么,它总是输出当我按 1 时会发生什么。我曾经使用 %errorlevel% 并且工作正常但后来它停止工作所以我切换到新方法(IF ERRORLEVEL WHATEVER)现在它也不行。

请阅读 Microsoft 支持文章 Testing for a Specific Error Level in Batch Files

并打开命令提示符 window、运行 if /? 并阅读输出帮助,尤其是关于 errorlevel.

的段落

您的批处理文件的解决方案非常简单,颠倒 errorlevel 上测试的行的顺序:

@echo off
title Choices
CMD /C EXIT 0
echo [1] Choice 1
echo [2] Choice 2
echo [3] Choice 3
choice /c 123 /n 
IF ERRORLEVEL 3 GOTO THREE
IF ERRORLEVEL 2 GOTO TWO
IF ERRORLEVEL 1 GOTO ONE
echo Nice you broke it
pause
exit
:ONE
echo CONGRATS YOU CHOSE 1
pause
exit
:TWO
echo NICE YOU CHOSE 2
pause
exit
:THREE
echo OOH YOU CHOSE 3
pause
exit