在batch file参数里面input另一个程序

我有一个batch file,我打电话这样的事情

call do.cmd "one two" 

do.cmd我启动一个程序并从上面传递给它第一个参数:

 @echo off some_program.exe -name='%1' 

some_program.exenamevariables的值必须在单引号内部传递,而不包含双引号。 为了摆脱传递参数中的双引号,我做了一个像这样的临时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! 总是以安全的方式扩展变量。