这是我的代码:
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/