&安培;在批处理文件参数中签名以传递给另一个程序

时间:2016-01-19 08:12:49

标签: windows batch-file cmd

我有一个批处理文件,我用这样的东西打电话

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'

1 个答案:

答案 0 :(得分:2)

您可以尝试在此处使用延迟扩展。

@echo off
set "arg1=%~1"
setlocal EnableDelayedExpansion
some_program.exe -name='!arg1!'

这有效,因为%~1会删除封闭的引号(如果存在) !arg1!始终以安全的方式扩展变量。