2016-03-12 33 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