![我們可以在批次腳本中使用更多顏色嗎?](https://rvso.com/image/1585769/%E6%88%91%E5%80%91%E5%8F%AF%E4%BB%A5%E5%9C%A8%E6%89%B9%E6%AC%A1%E8%85%B3%E6%9C%AC%E4%B8%AD%E4%BD%BF%E7%94%A8%E6%9B%B4%E5%A4%9A%E9%A1%8F%E8%89%B2%E5%97%8E%EF%BC%9F.png)
我們已經有 16 種顏色了:
0 = Black 8 = Gray
1 = Blue 9 = Light Blue
2 = Green A = Light Green
3 = Aqua B = Light Aqua
4 = Red C = Light Red
5 = Purple D = Light Purple
6 = Yellow E = Light Yellow
7 = White F = Bright White
但我想在批次檔中使用更多顏色
有什麼幫助嗎?
答案1
我可以在 Windows 批次檔中使用更多 16 種顏色嗎?
不可以,因為大多數 Windows 應用程式僅支援 16 種顏色。
然而,在 Windows 10 Insiders Build #14931 中,Windows 主機已更新為支援 24 位元 RGB 真彩色。
不幸的是,如上所述,大多數 Windows 應用程式還無法使用此增強功能。
但是,透過使用適用於 Linux 的 Windows 子系統 (WSL),Linux 腳本和工具可以使用控制台的新 24 位元顏色支援:
我們收到的最常見的請求之一是增加 Windows 控制台可以支援的顏色數量。我們最喜歡的就是提供您所要求的功能!
但在 Windows 10 Insiders Build #14931 中,不僅僅是添加更多顏色,或將我們的控制台限制為僅 256 種顏色,
我們更新了 Windows 控制台以支援完整、絢麗的 24 位元 RGB 真彩色!
這實際上演示起來有點棘手,因為大多數 Windows 應用程式最多只支援 16 種顏色,而 Linux 世界已經廣泛支援 256 色終端一段時間了,而且 24 位元顏色正在變得更加成熟。
由於我們能夠在 Windows Linux 子系統 (WSL) 上使用新的 Bash on Ubuntu on Windows 環境來運行 Linux 應用程式和腳本,我們可以使用一些 Linux 腳本和工具來演示控制台的新 24 位元顏色支援:
我們尚未開始改進控制台屬性頁面以支援控制台的新顏色渲染功能,並且我們尚未修改預設的 Windows 顏色映射;我們將在這裡進行改進,並在未來版本中對我們待辦事項中排隊的許多其他功能進行改進。
答案2
Windows 10 conhost.exe確實支持ANSI 轉義碼包括 24 位元顏色。看
但目前您需要啟用 ANSI 序列支持透過建立一個名為VirtualTerminalLevel
in 的DWORDHKEY_CURRENT_USER\Console
並將其值設為 1。下面是一個cmd範例
echo ESC[38;2;40;177;249m color: 40;177;249 ESC[0m
echo ESC[38;2;255;255;100m color: 255;255;100
echo ESC[48;2;200;0;200m color: 200;0;200 ESC[0m
不幸的是,我無法在此處貼上原始轉義字符,因此您需要更改ESC
為真正的轉義字符(ASCII 27/0x1B)本地。這是範例輸出:
在 PowerShell 中,將轉義字元嵌入為[char]0x1B
、或 更容易[char]27
,而無需解析貼上原始轉義字元的方法`u{001B}
`e
echo "$([char]0x1B)[38;2;40;177;249m color: 40;177;249 $([char]0x1B)[0m"
echo "$([char]0x1B)[38;2;255;255;100m color: 255;255;100"
echo "$([char]0x1B)[48;2;200;0;200m color: 200;0;200 $([char]0x1B)[0m"
您也可以檢查從 Windows 批次檔中偵測 ANSI 相容控制台並根據目前控制台列印 4 位元或 24 位元顏色。在 PowerShell 中,它要簡單得多,只需使用$Host.UI.SupportsVirtualTerminal