Batch file 在批处理子例程调用中将感叹号作为参数传递
多亏了这个社区,我终于学会了如何在批处理延迟扩展块中立即使用逃逸标记。 (使用两个转义插入符号,而不仅仅是一个,太棒了) 但我似乎无法找到或弄清楚如何将包含感叹号的变量的内容作为参数传递给批处理子例程 例如:Batch file 在批处理子例程调用中将感叹号作为参数传递,batch-file,dos,substitution,delayedvariableexpansion,Batch File,Dos,Substitution,Delayedvariableexpansion,多亏了这个社区,我终于学会了如何在批处理延迟扩展块中立即使用逃逸标记。 (使用两个转义插入符号,而不仅仅是一个,太棒了) 但我似乎无法找到或弄清楚如何将包含感叹号的变量的内容作为参数传递给批处理子例程 例如: @echo off setLocal EnableDelayedExpansion set variable=Hello^^! echo "!variable!" call :subroutine "!variable:^^!=^^!!" pause exit :subroutine e
@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 "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
您需要一种不同的方式来替换变量,以及更多的插入符号
@echo off
setLocal EnableDelayedExpansion
set variable=Hello^^!
echo "!variable!"
call :subroutine %variable:!=^^^^^^^^^^!%
exit /b
:subroutine
echo %~1
exit /b
或加上引号:
调用:子例程“%variable:!=^^^!%”
在函数中,您需要展开%1
,不带任何引号,因为调用
参数中插入符号的数量总是奇数
但无论如何,尝试这样的事情是个坏主意。我同意Aacini的观点,即您应该使用参考传递。
这是处理任何可能内容的唯一方法
@echo off
setLocal EnableDelayedExpansion
set variable=Hello^^!
echo "!variable!"
call :subroutine variable
exit /b
:subroutine
echo !%1!
exit /b
改为传递变量的名称(按引用传递)