奇怪的字符串以winXP(findstr)上的彩色回声结尾

时间:2016-03-12 14:12:58

标签: windows batch-file cmd windows-xp

最近我在批处理文件中发现了coloring echo,在我尝试使用Windows XP之前,一切都很好看。这个错误(?)在更高版本上是不可重复的(至少在w7,w8上)

使用. .调用字符串后,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我找到了一个解决方案,但每次创建一个文件时,@ jeb的解决方案,但不会删除它。因此,简单的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%"

1 个答案:

答案 0 :(得分:1)

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

但是当创建的临时文件包含点而不是退格时,问题就可以解决了 因此我构建了第二个解决方案,但正如dbenham所提到的,我的原始代码stil无法处理某些字符。

Carlos已将我原来的想法改进为Dostips: Color function v19

的快速防弹版本