我们可以在批处理脚本中使用更多颜色吗?

我们可以在批处理脚本中使用更多颜色吗?

我们已经有 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 应用程序目前还不能利用此增强功能。

但是,使用 Windows Subsystem for Linux (WSL),Linux 脚本和工具可以使用控制台的新 24 位颜色支持:

我们收到的最常见请求之一是增加 Windows 控制台可以支持的颜色数量。我们最乐意做的就是提供您要求的功能!

但在 Windows 10 Insiders Build #14931 中,我们并没有添加更多颜色,也没有将控制台限制为 256 种颜色,

我们已经更新了 Windows 控制台以支持完整、出色的 24 位 RGB 真彩色!

这实际上有点难以演示,因为大多数 Windows 应用程序最多只支持 16 种颜色,而 Linux 世界现在已经广泛支持 256 种颜色终端,并且 24 位颜色正变得越来越成熟。

由于我们能够使用位于 Windows 子系统 Linux (WSL) 上的 Windows 环境中的新 Bash on Ubuntu 运行 Linux 应用程序和脚本,我们可以使用一些 Linux 脚本和工具来演示控制台的新 24 位颜色支持:

在此处输入图片描述

在此处输入图片描述

我们尚未开始改进控制台属性页面以支持控制台的新颜色渲染功能,并且我们还没有修改默认的 Windows 颜色映射;我们将在这里以及在未来版本中排队等待的许多其他功能上进行改进。

来源Windows 控制台中的 24 位颜色!| 面向开发人员的 Windows 命令行工具

答案2

Windows 10 控制台支持ANSI 转义代码包括 24 位颜色。请参阅

但是目前你需要启用 ANSI 序列支持通过创建一个名为的VirtualTerminalLevelDWORDHKEY_CURRENT_USER\Console并将其值设置为 1。之后,如果 bash 支持 24 位颜色,那么您也可以在任何 cmd 或 PowerShell 会话中使用 24 位 ANSI 颜色。以下是 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) 本地。以下是示例输出:

cmd 24位颜色

在 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"

powershell 24位颜色

您还可以查看从 Windows 批处理文件中检测与 ANSI 兼容的控制台并根据当前控制台打印 4 位或 24 位颜色。在 PowerShell 中,这要简单得多,只需使用$Host.UI.SupportsVirtualTerminal

如何让 win32 控制台识别 ANSI/VT100 转义序列?

相关内容