奇怪的字符串以winXP结尾的彩色回显(findstr)
问题描述:
最近我在批处理文件中发现了大约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%"
答
如上所述,findstr command has some strange behaviour。
在XP上,它用点替换了退格字符。
但是,当创建的临时文件包含点而不是退格时,问题就可以解决。
因此,我构建了第二个解决方案,但由于dbenham提到我的原始代码stil无法处理某些字符。
卡洛斯改善了我最初的想法到一个快速和防弹版本在Dostips: Color function v19
尝试的NirCmd(这里下载:http://www.nirsoft.net/utils/nircmd.html)。像这样使用它:'nircmdc setconsolecolor 10' - 随后书写的文字将以绿色打印。 – gordon
对不起,在另一个文件中改变颜色不感兴趣。 – KeyWeeUsr
对不起,不会有彩色文字。 – gordon