如何为批处理切换开关实现Yes绿/No红的颜色显示功能?
批处理菜单添加Yes/No颜色标记解决方案
批处理中可通过ANSI转义序列实现文本颜色控制,绿色对应\033[32m,红色对应\033[31m,输出后需用\033[39m恢复默认颜色,避免后续文本继承颜色。以下是修改后的完整代码:
@echo off setlocal enabledelayedexpansion :: 定义ANSI转义字符(ESC) for /f %%a in ('echo prompt $E^| cmd') do set "ESC=%%a" set "option1=no" set "option2=no" set "startScript=0" :menu cls echo] echo] echo Select an option: :: 输出带颜色的Option1状态 echo 1 - Toggle Option 1 call :colorOption !option1! echo( :: 输出带颜色的Option2状态 echo 2 - Toggle Option 2 call :colorOption !option2! echo( echo 3 - Start Script echo 4 - Exit choice /c 1234 /n /t 1000 /d 4 set "choice=%errorlevel%" if %choice%==1 ( if "!option1!"=="yes" ( set "option1=no" ) else ( set "option1=yes" ) goto menu ) else if %choice%==2 ( if "!option2!"=="yes" ( set "option2=no" ) else ( set "option2=yes" ) goto menu ) else if %choice%==3 ( set "startScript=1" cls echo Starting the script with the selected options... rem Add your script code here if "!option1!"=="yes" ( call :function1 ) if "!option2!"=="yes" ( call :function2 ) echo Done pause set "startScript=0" REM Reset the startScript variable goto menu ) else if %choice%==4 ( exit /b ) goto menu :: 颜色输出子函数:根据传入的参数输出对应颜色的文本 :colorOption if "%~1"=="yes" ( echo %ESC%[32m%~1%ESC%[39m ) else ( echo %ESC%[31m%~1%ESC%[39m ) goto :eof :function1 echo Function 1 is running... rem Add your code for function 1 here goto :eof :function2 echo Function 2 is running... rem Add your code for function 2 here goto :eof
关键改动说明
- ESC变量定义:通过
for /f调用cmd获取转义字符,这是批处理中获取ANSI转义码的通用方式,无需额外工具 - 颜色子函数:
:colorOption接收状态参数,自动判断输出绿色yes或红色no,并立即恢复默认文本颜色,避免影响后续输出 - 菜单输出调整:替换原菜单中直接输出状态的逻辑,改为调用颜色子函数,实现带色显示
- 兼容性:该方案适用于Windows 10 1511版本及以上(主流Windows系统均支持),若需兼容更早版本,可改用
color命令或第三方工具,但ANSI转义是当前最优方案
内容的提问来源于stack exchange,提问作者Visualize
相关产品推荐
相关产品推荐

