我有一个Ant脚本,我需要按如下方式调用批处理脚本:
<exec dir="${basedir}\work_internal\${platform}" executable="cmd.exe">
<arg line ="/c example.bat 'C:\work_internal\${platform}' 'revn=120 SPECIAL_OBJS='a b''" />
我需要将参数传递给example.bat,第一个参数是一个目录,第二个参数是'revn = 120 SPECIAL_OBJS ='a b'',其中SPECIAL_OBJS ='a b',其中'a b'必须在引号中。但是当它调用Bat脚本时,它会丢弃'a b'周围的引号,因此在第二个参数中它被解释为revn = 120 SPECIAL_OBJS = a b。
如何使其读取为revn = 120 SPECIAL_OBJS =“a b”?
答案 0 :(得分:1)
单引号不会按照您希望的方式配对,但您可以使用"
实体嵌入单引号 - 例如:
<arg line=" ... "revn=120 SPECIAL_OBJS='a b'"" />
对于我ant -verbose
,上面给出了以下内容:
[exec] Executing 'cmd.exe' with arguments:
[exec] '/c'
[exec] 'example.bat'
[exec] 'C:\work_internal\${platform}'
[exec] 'revn=120 SPECIAL_OBJS='a z''
在您发布的xml中,引用对(v - v)位于:
<arg line="/c example.bat
v----------------------------v v----------------------v vv
'C:\work_internal\${platform}' 'revn=120 SPECIAL_OBJS='a b''" />
看起来不像你想要的那样,并且该行被错误地分解。
将参数传递给批处理脚本的另一种方法是使用单独的arg value=
元素:
<exec dir="." executable="cmd.exe">
<arg value="/c" />
<arg value="example.bat" />
<arg value="C:\work_internal\${platform}" />
<arg value="revn=120 SPECIAL_OBJS='a b'" />
</exec>
而不是将所有内容作为单行传递给shell。这样可以避开(shell)标记化逻辑,这种逻辑会以不同的方式打破排队。