You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批处理脚本选择异常:无论选何选项均启动Test.exe,求问题排查

问题出在ERRORLEVEL的判断顺序上!

你用CHOICE命令的时候,系统对IF ERRORLEVEL N的判断逻辑是**“当前ERRORLEVEL值大于等于N”**,而不是严格等于。所以你现在的代码里,不管选1、2还是4,第一个判断IF ERRORLEVEL 1都会成立——因为这三个选项对应的ERRORLEVEL分别是1、2、4,全都是≥1的,结果M总是被设为1,自然每次都跳去启动Test.exe了。

修正方法:把ERRORLEVEL的判断按从高到低的顺序来写

把判断语句反过来,先检查最大的数值(4),再检查2,最后检查1,这样就能确保只有当ERRORLEVEL≥4时才会触发第一个判断,不会被更小的数值覆盖:

ECHO OFF
CLS
:MENU
ECHO.
ECHO ...............................................
ECHO PRESS 1 or 2 to select your task, or 4 to EXIT.
ECHO ...............................................
ECHO.
ECHO 1 - Test
ECHO 2 - Production
ECHO 4 - EXIT
ECHO.
CHOICE /C:124
IF ERRORLEVEL 4 SET M=4
IF ERRORLEVEL 2 SET M=2
IF ERRORLEVEL 1 SET M=1
IF %M%==1 GOTO TEST
IF %M%==2 GOTO PROD
IF %M%==4 GOTO EOF
:TEST
ECHO TEST
cd %~dp0\Test\
start Test.exe
GOTO MENU
:PROD
ECHO PROD
cd %~dp0\Production\
start Production.exe
GOTO MENU

另一种更简洁的写法(可选)

其实你也可以不用设置M变量,直接用GOTO和ERRORLEVEL判断结合,代码会更清爽:

ECHO OFF
CLS
:MENU
ECHO.
ECHO ...............................................
ECHO PRESS 1 or 2 to select your task, or 4 to EXIT.
ECHO ...............................................
ECHO.
ECHO 1 - Test
ECHO 2 - Production
ECHO 4 - EXIT
ECHO.
CHOICE /C:124
IF ERRORLEVEL 4 GOTO EOF
IF ERRORLEVEL 2 GOTO PROD
IF ERRORLEVEL 1 GOTO TEST

:TEST
ECHO TEST
cd %~dp0\Test\
start Test.exe
GOTO MENU
:PROD
ECHO PROD
cd %~dp0\Production\
start Production.exe
GOTO MENU

这个写法的逻辑和之前一致,只是省去了中间变量,直接根据ERRORLEVEL跳转到对应标签,同样要记住保持从高到低的判断顺序哦。

内容的提问来源于stack exchange,提问作者GettingStarted

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 16:53:11