我在 Windows 10 上,无法显示 ANSI 转义序列颜色。
我已经在注册表中设置VirtualTerminalLevel
为1
HKEY_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