windows - 如何在 Windows 批处理文件中使用多种颜色?

标签 windows batch-file colors character-encoding cmd

我想知道是否可以在 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/

相关文章:

string - Windows批处理文件中的IF条件下的“…”和x“…”之间有什么区别?

batch-file - ffmpeg 与输出文件相同的输入(需要临时文件但如何?)

windows - 为什么第二个参数会导致此脚本失败?

eclipse - 在 Windows 7 上的 Eclipse 中更改 'Outline View' 的突出显示颜色

Android:java.lang.IllegalArgumentException:未知颜色

windows - 如何解决 Windows 计划任务未运行的问题?

python - 使用 python 在 Windows 上复制锁定的 dbf 文件

javascript - 目标类元素而不是带有闪烁动画脚本的文档主体

Windows 进程激活服务 (WAS) 将无法启动

c - 如何将控制台中的文本保存到 C 中的字符串(Windows 平台)