我读过这篇文章,这在大多数情况下都有帮助,而这篇文章似乎是重复的,但我无法让它工作。
免责声明:禁用/启用延迟扩展是一种解决方法,但这很烦人,除非可以禁用整个脚本。我很好奇是否有更直接的方法。
我使用这个非常简单的 colorEcho脚本,有时我只想打印一个感叹号。正如该帖子所示(但未能解决),它不打印感叹号。
复制:
@echo Off
SETLOCAL EnableDelayedExpansion
rem Initialize backspace-space-backspace
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
set "DEL=%%a"
)
rem Using it
call :colorEcho 0a "Give me an exclamation!"
echo.
pause
GOTO :EOF
rem The actual color-print hack
:colorEcho
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1i
给出:
我试过了:
call :colorEcho 0A "Ex^!"
和变种^^^!
- 首先
set excl=^^!
然后CALL :colorEcho "Foo!excl!"
- 一些具有更多/更少转义的变体
创建了一个没有 的简化例程
colorEcho
,但遇到了同样的问题::test rem How to call :test with %1 containing an excl mark echo %1 exit /B
也许这是不可能的,我要么不想输出感叹号,要么我应该使用已经提到的DisableDelayedExpansion
. 有任何想法吗?