Windows命令行choice命令未设置ERRORLEVEL问题求助
解决批处理Choice命令ERRORLEVEL为空的问题
你的代码核心问题在于Choice命令的/c参数格式错误,同时可以优化判断逻辑提升可靠性:
1. 修正Choice命令的参数格式
原代码中/c123的写法是错误的,/c参数需要与后续的选项字符之间保留空格,否则命令无法正确解析选项集合,导致ERRORLEVEL无法被设置。修正后的命令应为:
choice /c 123 /n "Select an option:"
2. 更可靠的ERRORLEVEL判断方式
直接使用if errorlevel N语法比读取%ERRORLEVEL%变量更可靠,它会检查ERRORLEVEL的值是否大于等于N,只需按从高到低的顺序判断即可:
@echo off cls choice /c 123 /n "Select an option:" echo Selected option: %ERRORLEVEL% if errorlevel 3 ( echo "launching Lode Runner" rem mount a: W:\GAMES\RETRO\DOS\abandonware\LODERUN rem a: rem jouer.bat goto end ) if errorlevel 2 ( echo "launching Ante Up" rem mount a: W:\GAMES\Poker\Ante-Upa rem a: rem FNPC.EXE goto end ) if errorlevel 1 ( echo "launching casino games" rem mount a: W:\GAMES\Poker\CasinoGames rem a: rem runme.bat goto end ) :end
3. 处理环境变量提前展开的问题
如果仍遇到ERRORLEVEL为空的情况,可能是批处理的环境变量提前展开导致的,此时可以启用延迟环境变量扩展,用!ERRORLEVEL!代替%ERRORLEVEL%:
@echo off setlocal enabledelayedexpansion cls choice /c 123 /n "Select an option:" echo Selected option: !ERRORLEVEL! if !ERRORLEVEL!==1 ( echo "launching casino games" rem mount a: W:\GAMES\Poker\CasinoGames rem a: rem runme.bat goto end ) :: 其余判断同理替换为!ERRORLEVEL!
内容的提问来源于stack exchange,提问作者phil
相关产品推荐
相关产品推荐

