2016-03-12 56 views
2

最近我在批處理文件中發現了大約coloringecho,一切都很好,直到我在Windows XP上試用它。此錯誤(?)在高版本上不可重現(至少在w7,w8上)奇怪的字符串以winXP結尾的彩色回顯(findstr)

究竟是什麼原因導致. .在與call :cecho <colors> "<string>"調用時出現在字符串後面?如何擺脫它,仍然使它在winXP和更高版本上工作?

@echo off 
setlocal ENABLEDELAYEDEXPANSION 
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
    set "DEL=%%a" 
) 

call :cecho 03 "I am colorful, yay" & echo. 
pause 
exit 

:cecho 
@echo off 
<nul set /p "=%DEL%" > "%~2" 
findstr /v /a:%1 /R "^$" "%~2" nul 
del "%~2" > nul 2>&1 

輸出:

I am colorful, yay:. . 
Press any key to continue . . . 

編輯: PS:我沒有興趣在外部程序,VBS或PowerShell的。請提供純批量解決方案。

EDIT2:

感謝@sokin我找到了一個解決方案,但是傑布@的解決方案,每次創建一個文件,但不刪除它。因此簡單的del修復了它。

@echo off 
setlocal EnableDelayedExpansion 
for /f "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
    set "DEL=%%a" 
) 
<nul > X set /p ".=." 

call :color 1a "a" 
call :color 1b "b" 
call :color 1c "^!<>&| %%%%"*?" 
del "%~dp0X" 
pause 
exit 

:color 
set "param=^%~2" ! 
set "param=!param:"=\"!" 
findstr /p /A:%1 "." "!param!\..\X" nul 
<nul set /p ".=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%" 
+0

嘗試的NirCmd(這裏下載:http://www.nirsoft.net/utils/nircmd.html)。像這樣使用它:'nircmdc setconsolecolor 10' - 隨後書寫的文字將以綠色打印。 – gordon

+0

對不起,在另一個文件中改變顏色不感興趣。 – KeyWeeUsr

+0

對不起,不會有彩色文字。 – gordon

回答

1

如上所述,findstr command has some strange behaviour
在XP上,它用點替換了退格字符。

但是,當創建的臨時文件包含點而不是退格時,問題就可以解決。
因此,我構建了第二個解決方案,但由於dbenham提到我的原始代碼stil無法處理某些字符。

卡洛斯改善了我最初的想法到一個快速和防彈版本在Dostips: Color function v19