如何在批处理(Batch)中使用errorlevel?
批处理中ErrorLevel的正确用法
首先明确:ErrorLevel不是普通环境变量,不能像自定义变量那样直接用%errorlevel%做常规判断(虽然部分场景可以,但原生判断方式更可靠)。
你的代码问题分析
你用set /p获取用户输入后,试图用if %errorlevel% == 1 echo test,但这个逻辑不成立:
set /p只有在输入操作失败(比如从空文件读取输入、重定向错误)时,才会将ErrorLevel设为1;- 用户正常输入(包括直接按回车)时,
set /p执行成功,ErrorLevel会保留之前命令的状态(你的代码里之前的命令都是成功的,ErrorLevel为0),所以这个判断永远不会触发。
正确的ErrorLevel判断方式
判断ErrorLevel大于等于指定值(最常用的原生方式)
语法:if errorlevel N 命令
比如要判断ErrorLevel≥1,直接写:if errorlevel 1 echo test精确判断ErrorLevel等于指定值
用equ(等于)运算符,注意要用%errorlevel%,但仅适用于部分场景:if %errorlevel% equ 1 echo test
针对你代码需求的修正
如果你的目的是判断用户是否选择升级技能(即输入Y/N),应该检查%lvlup%变量的值,而非ErrorLevel:
@ECHO off set charisma="1" set intelligence="1" set strength="1" set speed="1" set agility="1" echo Skill Levels echo charisma %charisma% echo intelligence %intelligence% echo strength %strength% echo speed %speed% echo agility %agility% set /p lvlup="Lvl up a skill? (Y/N)" :: 判断用户输入Y的情况 if /i "%lvlup%"=="Y" ( echo 开始升级技能... :: 这里写升级逻辑 ) else if /i "%lvlup%"=="N" ( echo 不升级技能 ) else ( echo 输入无效,请输入Y或N )
如果确实需要判断set /p是否执行失败,用原生ErrorLevel判断:
set /p lvlup="Lvl up a skill? (Y/N)" if errorlevel 1 echo 输入操作失败!
内容的提问来源于stack exchange,提问作者user17135778
相关产品推荐
相关产品推荐

