感谢这个社区,我终于学会了如何在批处理延迟扩展块中立即使用感叹号。
(使用两个转义符而不是一个,太棒了)
但我似乎无法找到或弄清楚如何将包含感叹号的变量的内容作为参数传递给批处理子例程。
例子:
@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 . . .
我希望第二个“你好”包含一个感叹号。
我在第 5 行尝试了各种子字符串替换排列,但无济于事。
帮助
最佳答案
您需要一种不同的变量替换方式,以及更多的插入符号。
@echo off
setLocal EnableDelayedExpansion
set variable=Hello^^!
echo "!variable!"
call :subroutine %variable:!=^^^^^^^^^^!%
exit /b
:subroutine
echo %~1
exit /b
或者用引号:
调用 :subroutine "%variable:!=^^^!%"
在您的函数中,您需要扩展
%1
没有任何引号,因为在 CALL
中插入符号的数量总是奇数范围。但是,尝试这样的事情是一个坏主意。
我同意 Aacini 的观点,您应该改用引用传递。
这是处理任何可能内容的唯一方法。
@echo off
setLocal EnableDelayedExpansion
set variable=Hello^^!
echo "!variable!"
call :subroutine variable
exit /b
:subroutine
echo !%1!
exit /b
关于batch-file - 在批处理子程序调用中将感叹号作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24099126/