批处理 - 尝试回显大于号 (>) 时的语法错误
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 ECHO
行 echo
什么都没有。当我将 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%"
会很好——尽管它会显示周围的引号)。
我有以下脱衣舞:
@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 ECHO
行 echo
什么都没有。当我将 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%"
会很好——尽管它会显示周围的引号)。