我有一个批处理文件,我用这样的东西打电话
call do.cmd "one two"
在do.cmd
我正在启动一个程序并从上面传递给它第一个参数:
@echo off
some_program.exe -name='%1'
some_program.exe
变量 name
的值必须在单引号内传递而不包含双引号。为了摆脱传递参数中的双引号,我创建一个像这样的临时变量:
set v_tmp=%1
set v_tmp=%v_artist:"=%
然后按
启动我的程序some_programm.exe -name='%v_tmp%'
问题开始于do.cmd
时,会传递一些带有&
符号的文字。如果我保留批处理文件代码,可变设置将失败,因为&
将充当分隔符。如果我通过
&
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'
?
答案 0 :(得分:2)
您可以尝试在此处使用延迟扩展。
@echo off
set "arg1=%~1"
setlocal EnableDelayedExpansion
some_program.exe -name='!arg1!'
这有效,因为%~1
会删除封闭的引号(如果存在)
!arg1!
始终以安全的方式扩展变量。