batch-file - 在批处理子程序调用中将感叹号作为参数传递

标签 batch-file dos substitution delayedvariableexpansion

感谢这个社区,我终于学会了如何在批处理延迟扩展块中立即使用感叹号。
(使用两个转义符而不是一个,太棒了)

但我似乎无法找到或弄清楚如何将包含感叹号的变量的内容作为参数传递给批处理子例程。

例子:

@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/

相关文章:

windows - MS-dos FAT32格式和windows FAT32格式有什么区别

dos - 我该如何修复这个批处理脚本?

python - 如何使用 sub() 匹配多行模式?

python - SymPy,使用已知模式或子表达式的简化/替换

regex - Bash - 在正则表达式中转义美元的正确方法

postgresql - 如何将 PSQL 命令行拆分为多行?

command-line - 命令行以递归方式删除文件,但排除某些文件

batch-file - MSDOS 6.22 如何获得批处理目录?

batch-file - 批处理以正确的时间创建视频 .srt 字幕

windows - 在命令行上处理分号