这是我的代码:

set var1="`netsh int ipv4 show interface ^| findstr /I Network`"

call:GetEles %var1%
goto:eof

:GetEles
for /F "tokens=1 usebackq" %%F IN (%~1) do echo %%F
goto:eof

当我在命令运行时检查命令时, ^ 在函数 :GetEles 中变为两倍:
for /F "token=1 usebackq" %%F IN (`netsh int ipv4 show interface ^^| findstr /I Network`) do echo %%F

加倍的 ^ 使我的脚本失败,我该如何解决?

最佳答案

正如其他人已经描述的那样,这是 call command 的一个令人讨厌的“功能”。

有几个选项可以解决这个问题:

  • 简单地撤消子程序中的插入符号加倍:

    @echo off
    set "VAR=caret^symbol"
    call :SUB "%VAR%"
    exit /B
    
    :SUB
        set "ARG=%~1"
        echo Argument: "%ARG:^^=^%"
        exit /B
    
  • call 引入了第二个解析阶段,所以让第二个阶段扩展变量:

    @echo off
    set "VAR=caret^symbol"
    call :SUB "%%VAR%%"
    exit /B
    
    :SUB
        echo Argument: "%~1"
        exit /B
    
  • 通过引用传递值(所以是变量名)而不是通过值:

    @echo off
    set "VAR=caret^symbol"
    call :SUB VAR
    exit /B
    
    :SUB
        setlocal EnableDelayedExpansion
        echo Argument: "!%~1!"
        endlocal
        exit /B
    
  • 不要将变量值传递给子程序,而是在那里读取(全局)变量:

    @echo off
    set "VAR=caret^symbol"
    call :SUB
    exit /B
    
    :SUB
        echo Argument: "%VAR%"
        exit /B
    
  • 关于windows - 将字符串作为参数发送到批处理脚本中时,^ 会加倍,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41769803/

    10-10 10:49