您可以在沒有任何外部程序的情況下進行多色輸出。
@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可以配置為以定義的顏色輸出行號或文件名。
因此,我首先創(chuàng)建一個以文本為文件名的文件,內容是一個<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
這使用了有效路徑/文件名的規(guī)則。
如果\..\
在路徑中,前綴元素將被完全刪除,并且不需要此元素只包含有效的文件名字符。