【发布时间】:2017-04-04 17:09:20
【问题描述】:
我已经开始在 Windows 10 的批处理脚本中使用 ANSI 颜色代码。今天我发现颜色突然停止工作,我追踪到带有嵌入式 MSYS 命令的 for 命令。例如:
@echo off
echo ^[[92mThis works.^[[0m
for %%f in (x) do @echo ^[[93mThis also works.^[[0m
for /l %%f in (1,1,1) do @echo ^[[94mThis too works.^[[0m
for /f "tokens=*" %%f in ('date /t') do @echo ^[[95mThis one works.^[[0m
for /f "tokens=*" %%f in ('sha1sum.exe ^< NUL') do @echo ^[[91mThis one DOES NOT work.^[[0m
echo ^[[92mThis works.^[[0m
(注意:你看到的 "^[" 必须是单个 ESC 字符,ASCII 27,而不是。例如,在 Vim 的插入模式下键入 <C-V><ESC>。)
在我的例子中,sha1sum.exe 指的是来自 Git for Windows 的 C:\Program Files\Git\usr\bin\sha1sum.exe。我们都知道批处理脚本/cmd.exe 对它们有自己的魔力,但我想不出对此的解释。在命令行期间是否以某种方式关闭颜色解释?如果是这样,是否有办法强制它重新启动?
追加:
值得注意的是,它似乎会影响整个“命令行”,这意味着如果您使用括号嵌套了 ifs 和 fors,那么括号中的整个位似乎都会受到影响。
【问题讨论】:
-
stackoverflow.com/questions/16755142/… 我不确定 ANSI 颜色是否曾在 Windows 10 中工作过。
-
我确信它是超级初级的,就像 findstr 声称的那个东西是正则表达式一样。
标签: batch-file colors ansi msys