我想知道是否可以在 Windows 批处理文件的同一行上使用不同颜色的文本,例如,如果它说
echo hi world
我希望“hi”是一种颜色,“world”是另一种颜色。也许我可以将 COLOR 命令设置为变量:
set color1= color 2
set color9= color A
然后将它们与
一起部署在同一条线上echo hi world
但我不知道该怎么做。
最佳答案
无需任何外部程序即可进行多色输出。
@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"
)
echo say the name of the colors, don't read
call :ColorText 0a "blue"
call :ColorText 0C "green"
call :ColorText 0b "red"
echo(
call :ColorText 19 "yellow"
call :ColorText 2F "black"
call :ColorText 4e "white"
goto :eof
:ColorText
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
goto :eof
它使用了 findstr 命令的颜色特性。
Findstr 可以配置为以定义的颜色输出行号或文件名。
所以我首先创建一个文件,文件名是文本,内容是一个<backspace>
。字符 (ASCII 8)。
然后我在文件和 nul 中搜索所有非空行,因此文件名将以正确的颜色输出并附加一个冒号,但冒号立即被 <backspace>
删除。 .
编辑:一年后......所有字符均有效
@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"
)
rem Prepare a file "X" with only one dot
<nul > X set /p ".=."
call :color 1a "a"
call :color 1b "b"
call :color 1c "^!<>&| %%%%"*?"
exit /b
:color
set "param=^%~2" !
set "param=!param:"=\"!"
findstr /p /A:%1 "." "!param!\..\X" nul
<nul set /p ".=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%"
exit /b
这使用有效路径/文件名的规则。
如果 \..\
在路径中,前缀元素将被完全删除,并且该元素不必只包含有效的文件名字符。
关于windows - 如何在 Windows 批处理文件中使用多种颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4339649/