代码之家  ›  专栏  ›  技术社区  ›  goulashsoup

Batch-尝试回显大于号(>)时出现语法错误

  •  0
  • goulashsoup  · 技术社区  · 7 年前

    我有以下脱衣舞女:

    @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
    

    但是2。 ECHO -中的行 :error 常规 echo 没什么。当我减少 CALL 参数字符串到 "!countArgs!. Argument ^-^>" 我得到一个语法错误,当我把它减少到 "!countArgs!. Argument ^-" 甚至 "!countArgs!. Argument -" 它工作正常。

    根据 this post 添加时应转义字符 ^ 如果它在引号内,这是有意义的,因为在 :错误 例行程序 ~ 删除包围的引号。。。

    我怎样才能修复它?

    感谢您的帮助。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Stephan    7 年前

    没有必要逃避 > 使用 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
    

    使用 呼叫 行,因为周围有引号。
    使用 set 命令,也因为周围的引号。
    使用 回响 因为使用延迟扩展( echo %x% 会失败,但是 echo "%x%" 可以,尽管它会显示周围的引号)。