如何在CMD同一行中修改单个文字的颜色
在CMD中实现文本局部变色的批处理方案
如果需要在CMD命令行环境里给一段文本中的部分内容单独设置颜色,下面的批处理代码可以实现这个需求:
@echo off SETLOCAL EnableDelayedExpansion for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do ( set "DEL=%%a" ) color 0a title App cls :welcome_page cls echo Welcome to App call :colorEcho 0C "Menu in red" & call :colorEcho 0B "and this text in a different color" & call :colorEcho 0C "back to red" echo. pause exit :colorEcho echo off <nul set /p ".=%DEL%" > "%~2" findstr /v /a:%1 /R "^$" "%~2" nul del "%~2" > nul 2>&1
代码说明
- 核心原理:CMD本身不支持直接输出分段变色的文本,这里通过
for /F命令捕获退格符和ANSI转义序列存入DEL变量,再借助findstr的/a参数(指定输出颜色)结合临时文件来实现局部着色。 - 颜色代码规则:
/a:后面的两位十六进制数,第一位是背景色(0=黑,1=蓝,2=绿等),第二位是前景色(C=红,B=浅蓝,A=浅绿等),比如0C就是黑底红字。 - 自定义子过程
:colorEcho:接受两个参数,第一个是颜色代码,第二个是要着色的文本。它会先将退格符写入临时文件,再用指定颜色输出文本,最后清理临时文件。 - 连续调用注意:原代码里的
call :colorEcho ... :colorEcho ...写法有误,应该用&连接多个call命令,否则第二个及之后的:colorEcho会被当成第一个call的参数,导致执行失败。
修正点说明
原代码存在两处小问题:
- 连续调用
:colorEcho时的语法错误,需用&分隔多个call命令; - 最后一行的
del "%~2" > nul 2>&1i多了个i,修正为del "%~2" > nul 2>&1避免报错。
内容的提问来源于stack exchange,提问作者GremGrem
相关产品推荐
相关产品推荐

