的Cmd.exe批处理脚本双色输出用FOR/F“MSYS”命令
我已经开始利用批处理脚本ANSI颜色代码为Windows 10今天,我发现突然颜色停止工作,而且我也被曝for
命令使用嵌入式MSYS命令。例如:的Cmd.exe批处理脚本双色输出用FOR/F“MSYS”命令
@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有他们自己的巫术,但我想不出一个解释。是否在命令行持续时间内切换颜色解释?如果是的话,是否会有办法强制它恢复?
附加:
值得一提的是它似乎影响了整个“命令行”,如果你已经使用括号包裹在括号中的整个位似乎受到影响嵌套如果和维权的意义。
这只是一个确认和一些解决方法
示例代码
@echo off
setlocal enableextensions disabledelayedexpansion
for /f %%a in ('
forfiles /p "%~dp0." /m "%~nx0" /c "cmd /c echo 0x1B"
') do set "ESC=%%a"
echo %ESC%[91mRed
echo %ESC%[92mGreen
echo %ESC%[0mNormal
echo A simple base test
for /f "tokens=1,2" %%a in ('
echo 0000000000000000000000000000000000000000 %~f0
') do echo(.... %ESC%[92m%%a %ESC%[91m%%b %ESC%[0m
echo Git sha1sum
for /f "tokens=1,2" %%a in ('
E:\portable\bin\git\64\usr\bin\sha1sum.exe "%~f0"
') do echo(.... %ESC%[92m%%a %ESC%[91m%%b %ESC%[0m
echo Git sha1sum DELAYED
for /f "tokens=1,2" %%a in ('
E:\portable\bin\git\64\usr\bin\sha1sum.exe "%~f0"
') do set "output=%ESC%[92m%%a %ESC%[91m%%b %ESC%[0m"
echo(.... %output%
echo GNUPG sha1sum
rem ftp://ftp.gnupg.org/gcrypt/binary/sha1sum.exe
rem https://lists.gnupg.org/pipermail/gnupg-announce/2004q4/000184.html
for /f "tokens=1,2" %%a in ('
E:\portable\bin\sha1sum.exe "%~f0"
') do echo(.... %ESC%[92m%%a %ESC%[91m%%b %ESC%[0m
echo %ESC%[90mDone%ESC%[0m
正如所看到的,你可以处理一个简单的例子,但混帐sha1sum
可执行文件干扰控制台。
一些替代
最简单的一种是将输出发送到一个文件,然后使用
for /f
到文件Here你有一种方式来处理问题的信息处理(您将需要编译的代码)
选择工作的不同的工具。
谢谢。我认为这是我们无需直接从Microsoft获得反馈即可获得的最佳答案。在我的情况下,我把我的输出移出命令行来解决它。感谢您的建议。 C程序也很有吸引力。 –
http://*.com/questions/16755142/how-to-make-win32-console-recognize-ansi-vt100-escape-sequences 我不知道,ANSI颜色工作过在Windows 10 – abelenky
我敢肯定,这是超级简陋,像FINDSTR声称事情是正则表达式。 – SomethingDark