我有一个batch file,我打电话这样的事情
call do.cmd "one two"
在do.cmd
我启动一个程序并从上面传递给它第一个参数:
@echo off some_program.exe -name='%1'
some_program.exe
对name
variables的值必须在单引号内部传递,而不包含双引号。 为了摆脱传递参数中的双引号,我做了一个像这样的临时variables:
set v_tmp=%1 set v_tmp=%v_artist:"=%
然后通过启动我的程序
some_programm.exe -name='%v_tmp%'
当do.cmd
文件有&
sign时,问题就开始了。 如果我保留batch file代码,可变设置将失败,因为&
将作为分隔符。 如果我逃跑&
签字
set v_tmp=%1 set v_tmp=%v_tmp:&"=^^^&% set v_tmp=%v_tmp:"=%
那么some_program
会输出文字有^&
..
问题是如何从call do.cmd "one & two"
行得到正确的&
符号转义和双引号删除,以便在结果中有some_program.exe -name='one & two'
?
你可以尝试在这里使用延迟扩展。
@echo off set "arg1=%~1" setlocal EnableDelayedExpansion some_program.exe -name='!arg1!'
这是有效的,因为%~1
删除了封闭的引号(如果存在)。
和!arg1!
总是以安全的方式扩展变量。