2017-04-04 21 views
0

我已經開始利用批處理腳本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有他們自己的巫術,但我想不出一個解釋。是否在命令行持續時間內切換顏色解釋?如果是的話,是否會有辦法強制它恢復?

附加:

值得一提的是它似乎影響了整個「命令行」,如果你已經使用括號包裹在括號中的整個位似乎受到影響嵌套如果和維權的意義。

+0

http://stackoverflow.com/questions/16755142/how-to-make-win32-console-recognize-ansi-vt100-escape-sequences 我不知道,ANSI顏色工作過在Windows 10 – abelenky

+0

我敢肯定,這是超級簡陋,像FINDSTR聲稱事情是正則表達式。 – SomethingDark

回答

1

這只是一個確認和一些解決方法

示例代碼

@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 

輸出 sample code output

正如所看到的,你可以處理一個簡單的例子,但混帳sha1sum可執行文件干擾控制檯。

一些替代

  • 最簡單的一種是將輸出發送到一個文件,然後使用for /f到文件

  • Here你有一種方式來處理問題的信息處理(您將需要編譯的代碼)

  • 選擇工作的不同的工具。

+0

謝謝。我認爲這是我們無需直接從Microsoft獲得反饋即可獲得的最佳答案。在我的情況下,我把我的輸出移出命令行來解決它。感謝您的建議。 C程序也很有吸引力。 –

相關問題