无法在 Windows 10 中使用 ANSI 转义序列

无法在 Windows 10 中使用 ANSI 转义序列

我在 Windows 10 上,无法显示 ANSI 转义序列颜色。

我已经在注册表中设置VirtualTerminalLevel1HKEY_CURRENT_USER/Console

注册表项:

注册表项

正如这里建议的:https://superuser.com/a/1300251/1706673

当我打开时cmd.exe,我输入以下内容:

> echo ^<ESC^>[7m [7mInverse[0m
<ESC>[7m [7mInverse[0m

它只是将其打印为常规文本,而不是 ANSI 彩色文本。为了以防万一,我还进行了常规的重启仪式,但什么也没改变。

警告:我不想使用第三方工具、Windows Powershell 或 Windows 终端。我只想使用cmd.exe系统自带的工具。来自这个帖子,它指出自 Windows v1511(内部版本 10586,从 2015 年开始)以来,系统无论如何都应该能够显示 ANSI 转义序列,所以我只想在我的命令提示符中让它工作。

我的系统出了什么问题?

答案1

这些不是完整的转义序列;它们在 前面缺少实际的 ESC 字符(字节 0x1B)[7m。在其他语言中,您会看到它被写成\e\033\x1B,但 Cmd 没有等效语法 - 因此您找到的脚本实际上包含 ESC。但由于它是一个“控制”字符,因此在将脚本复制到网站后,它通常会很快丢失。

按下Ctrl[在 Cmd 提示符下插入此字符(您将看到^[):

C:\> echo 测试Ctrl[[1m这是粗体Ctrl[[m
测试这是大胆的

(请注意,格式代码有第二个普通[字符 - 您需要同时包含这两个字符。)

将其包含在文件中的一种方法就是将其放在字面上,例如创建一个%ESC%变量:

C:\> echo 设置“ESC= Ctrl[”>>test.bat

答案2

您必须使用chr(27)(又称“ESC”)来使 ansi 序列完整。
您可以使用以下方式获取它:

for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do set ESC=%%b

(批处理文件语法;如果您想直接在命令行上执行,请使用单个%而不是%%

然后你可以像这样使用它:

echo ^<ESC^>[7m %ESC%[7mInverse%ESC%[0m

相关内容