【问题标题】:Hardcoding Ansii escape sequence for echo in batch file批处理文件中回显的硬编码 Ansi 转义序列
【发布时间】:2018-01-16 02:31:11
【问题描述】:

我正在编写一个带有彩色输出的 Windows 批处理文件,使用 ANSII 颜色,例如

echo <ESC>[1m Some bold text <ESC>[0m
echo <ESC>[1;32m Some bold green text <ESC>[0m

来自this answerthis table 我知道我必须为&lt;ESC&gt; 使用ANSII 代码27 字符,我可以从file the user linked 复制它。

这工作正常,但我想知道是否有任何选项可以批量使用“普通”(可读)字符对这个序列进行“硬编码”,例如在 linux 上的 bash 中

echo -e "\033[1;32m Red Bold Text \033[0m"

this page 上,我找到了一些如何插入转义序列的选项。我也读过一个可以使用的

cmd /c exit 65
echo %=exitcodeAscii%

打印A,但这似乎不适用于

cmd /c exit 27
echo %=exitcodeAscii%[31m This would be supposed to be red, right?

如何使用批处理文件中的代码生成转义序列,而不是通过按某些组合键来插入它?

【问题讨论】:

  • 所以你想使用 ascii 中的退出代码为你生成颜色?
  • 我知道怎么用它给echo加上一个颜色。我想知道是否有另一种方式在代码中使用转义序列而实际上没有无法很好地读取/版本控制的神秘符号

标签: batch-file colors escaping


【解决方案1】:

您可以构建自己的 echo-e.bat 文件echo -e equivalent in Windows?

或者改用批处理函数。

call :echo-e "\x1b[1;31m Red Bold Text \x1b[0m"
exit /b

:echo-e
setlocal
set "arg1=%~1"
set "arg1=%arg1:\x=0x%"
forfiles /p "%~dp0." /m "%~nx0" /c "cmd /c echo(%arg1%"
exit /b

创建单个转义字符 (27) 您可以使用 FORFILES 或 PROMPT

喜欢这个示例

for /F "delims=#" %%a in ('prompt #$E# ^& for %%a in ^(1^) do rem') do set "esc=%%a"
echo %ESC%[1;31m Red Bold Text %ESC%[0m

【讨论】:

  • @Stephan 谢谢,我将“红色”固定为 31,但第二个示例对我有用,也许您在 %%a 后面有一个 invisible 空间?现在,我将set esc=%%a 更改为安全版本set "esc=%%a"
  • @jeb:现在它也适用于我。不知道,之前出了什么问题,我无法重现:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 2017-06-11
  • 2014-03-17
相关资源
最近更新 更多