感谢这个社区,我终于学会了如何在批量delayedExpansion块中远程使用感叹号。 (使用两个逃脱插入物不仅仅是一个,真棒)
但我似乎无法找到或弄清楚如何将包含感叹号的变量的内容作为参数传递给批处理子例程。
示例:
@echo off
setLocal EnableDelayedExpansion
set variable=Hello^^!
echo "!variable!"
call :subroutine "!variable:^^!=^^!!"
pause
exit
:subroutine
echo "%~1"
exit/b
输出:
"Hello!"
"Hello"
Press any key to continue . . .
我希望第二个“Hello”包含一个感叹号。 我已尝试在第5行进行各种子串替换,但无济于事。
帮助
答案 0 :(得分:2)
你需要一种不同的方式来替换变量,以及更多的插入符号。
@echo off
setLocal EnableDelayedExpansion
set variable=Hello^^!
echo "!variable!"
call :subroutine %variable:!=^^^^^^^^^^!%
exit /b
:subroutine
echo %~1
exit /b
或带引号: call:subroutine"%variable:!= ^^^!%"
在您的函数中,您需要展开{{1}}而不引用任何引号,因为%1
参数中的插入符号总是奇数。
但是,尝试这样的事情是个坏主意 我同意Aacini的意见,你应该使用传递参考 这是处理任何可能内容的唯一方法。
CALL
答案 1 :(得分:1)
问题可能不是如何将数据传递给子程序,而是如何将数据传递到子程序中
@echo off
setlocal enabledelayedexpansion
set "var=Hello^!"
setlocal disabledelayedexpansion
echo %var%
call :echo1 %var%
call :echo2 var
endlocal
setlocal enabledelayedexpansion
echo !var!
call :echo1 !var!
call :echo2 var
endlocal
endlocal
exit /b
:echo1
setlocal disabledelayedexpansion
echo %~1
endlocal
goto :eof
:echo2
setlocal enabledelayedexpansion
echo !%~1!
endlocal
goto :eof