Change color in batch file

要在批次檔中設定顯示的顏色,我們可以像下面這樣撰寫批次檔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@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"
)

#==========
#Main Action
#===========

goto :eof



:AppendColorText
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
goto :eof


:AppendColorTextLine
echo off
call :AppendColorText %~1 %~2
Echo.
goto :eof

筆者在這邊宣告了兩個Method可以直接叫用,一個是AppendColorText,一個是AppendColorTextLine,差異只在於是否要做換行的動作

需要叫用時可像下面這樣呼叫

call :AppendColorText [TextColor] [DisplayText]
call :AppendColorTextLine [TextColor] [DisplayText]

第一個參數帶入要顯示的顏色,第二個參數帶入要顯示的字串就可以了

顯示的顏色部分由兩個顏色代碼所組成,前面的顏色代碼代表背景色,後面的顏色代碼代表前景色,顏色的代碼可參閱下表

0 = 黑色
1 = 藍色
2 = 綠色
3 = 藍綠色
4 = 紅色
5 = 紫色
6 = 黃色
7 = 白色
8 = 灰色
9 = 淡藍色
A = 淡綠色
B = 淡藍綠色
C = 淡紅色
D = 淡紫色
E = 淡黃色
F = 亮白色

所以實際用起來會像下面這樣

call :AppendColorTextLine 0C "黑底紅字"

最後附上比較完整的使用範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
@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"
)

#==========
#Main Action
#===========
call :AppendColorTextLine 0C "黑底紅字"
call :AppendColorTextLine 02 "黑底綠字"
call :AppendColorTextLine 70 "白底黑字"
call :AppendColorTextLine 71 "白底藍字"

pause

goto :eof



:AppendColorText
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
goto :eof


:AppendColorTextLine
echo off
call :AppendColorText %~1 %~2
Echo.
goto :eof

運行結果如下