0

我读过这篇文章,这在大多数情况下都有帮助,而这篇文章似乎是重复的,但我无法让它工作。

免责声明:禁用/启用延迟扩展是一种解决方法,但这很烦人,除非可以禁用整个脚本。我很好奇是否有更直接的方法。

我使用这个非常简单的 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. 有任何想法吗?

4

1 回答 1

2

You can use this

set "ex=^^^!"
call :colorEcho 0a "Give me an exclamation%%ex%%"

But better would be to use call with a variable 9nstead of content. Because the call command has nasty side effects

于 2017-10-29T15:55:42.950 回答