批处理 - 尝试回显大于号 (>) 时的语法错误

Batch - syntax error when trying to echo greater-then sign (>)

我有以下脱衣舞:

@ECHO OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

SET /A countArgs=1
...
SET /A countArgs+=1

CALL :error "!countArgs!. Argument ^-^> bla"
EXIT /B 1

...

:error
    ECHO ERROR
    ECHO %~1
EXIT /B 0

但是 :error 例程中的第 2 ECHOecho 什么都没有。当我将 CALL 参数字符串缩减为 "!countArgs!. Argument ^-^>" 时出现语法错误,当我将其缩减为 "!countArgs!. Argument ^-" 甚至 "!countArgs!. Argument -" 时它可以正常工作。

根据 ,如果字符在引号内,则在添加 ^ 时应转义字符,这是有道理的,因为在 :error 例程中使用字符串作为参数时~ 删除包围引号...

我该如何解决?

感谢您的帮助。

无需使用 call 转义 >。由于周围的引号,它是安全的。在子例程中回显时发生错误。你可以使用延迟扩展来echo它:

@echo off

SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

SET /A countArgs=1
...
SET /A countArgs+=1

CALL :error "!countArgs!. Argument -> bla"
EXIT /B 1

...

:error
    ECHO ERROR
    for /f "delims=" %%a in ("%~1") do echo for:      %%a
    echo quoted:  "%~1"
    set "x=%~1"
    ECHO delayed:  !x!
EXIT /B 0

call 行是安全的,因为周围有引号。
使用 set 命令是安全的,也是因为周围的引号。
使用 echo 是安全的,因为使用延迟扩展(echo %x% 会失败,但 echo "%x%" 会很好——尽管它会显示周围的引号)。