我正在为 Windows 命令提示符编写程序。我最初是在 Windows 7 中处理它,但后来升级到 Windows 10,它已经坏了。
批处理文件以此开头:
rem _bc == Background Color (NOT ANSI)
rem _bc2 == ANSI BGCOLOR
rem _hc == Highlight Color
rem _hc2 == NOT Highlighted Color
set _hc=[1;36;
set _hc2=[1;37;
set _bc=[0m
set _bc2=46m
set color2=f
ansicon cmd /K
在我的程序中,我想获取一行输出,然后在行的开头和结尾(不是严格地,但作为示例)附加一个具有 ANSI 代码的变量来为我的文本着色。我一直为此使用 sed。使用 sed 比将变量硬编码到每个输出中更灵活......
echo Keep your eye out for %_hc%%_bc2%Highlighted%_bc%%_hc2%%_bc2% information!
这是与这样的比较:
echo THIS IS THE TEST OUTPUT:|sed "s/^/%_hc%%_bc2%/"|sed "s/$/%_bc%/"
rem ================[Result]=======================
rem Displays "THIS IS THE TEST OUTPUT" in color
rem This is broken in Windows 10's Command Prompt.
似乎使用 sed、sort 或基本上除了 echo 或 type 命令之外的任何东西,它都会去除颜色的输出,而只输出 ANSI 代码。这在 Windows 7 或 XP 中从未发生过。例如:
echo %_hc%%_bc2%THIS IS THE TEST OUTPUT:%_bc%|sort
rem ================[Result]=======================
rem Displays "←[1;36;46mTHIS IS THE TEST OUTPUT←[0m"
rem This works if you don't pipe it to sort.
rem Outputting to a file and then using type also works.
问题是 echo 不支持管道,因此我无法在修改后将其通过管道传输到 echo (因为它对于几乎所有目的都是多余的)。我不想将它重定向到与 Type 一起使用的文件,尽管我猜一个可管道类型的命令替代方案可以解决问题,但我四处搜索却找不到。
它应该保持灵活,以便使用 sed 等...我可以通过关键字、字段编号等在文本行的任何位置插入突出显示。我仍然可以完成此操作,例如:
Keep your eye out for Highlighted information!
rem ================[Result]=======================
rem Displays "Keep your eye out for Highlighted information!"
rem Where "Highlighted" is the only word in color.
在不通过管道传输文件或将 ansi 变量硬编码到设定位置的情况下解决此问题的任何帮助将不胜感激。