windows - 在 winXP 上以彩色回显结尾的奇怪字符串(findstr)

标签 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 不感兴趣。请使用纯批处理解决方案。

编辑2:

感谢@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%"

最佳答案

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

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

Carlos 在 Dostips: Color function v19 将我最初的想法改进为一个快速且防弹的版本

关于windows - 在 winXP 上以彩色回显结尾的奇怪字符串(findstr),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35958677/

相关文章:

cmd - 为什么我在 CMD 和 VBS 之间得到不同的结果?

java - 是否有一个框架可以让我加载用户的所有推文?

windows - 自动完全更新 Windows

java - "Unable to determine the location of Tomcat"命令消息

windows - 未设置变量?回声关闭

batch-file - 删除除具有特定字符串的文件名之外的所有文件

java - 从控制台运行 Java 应用程序时如何查看完整的异常堆栈跟踪?

windows - 自动在三个命令提示符下运行命令?

windows - 如何使用批处理文件创建 EXE 可执行文件?

sql - 从数据源名称获取实例名称