Ant脚本将参数传递给批处理文件

时间:2010-12-01 17:09:27

标签: ant

我有一个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”?

1 个答案:

答案 0 :(得分:1)

单引号不会按照您希望的方式配对,但您可以使用&quot;实体嵌入单引号 - 例如:

<arg line=" ... &quot;revn=120 SPECIAL_OBJS='a b'&quot;" />

对于我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)标记化逻辑,这种逻辑会以不同的方式打破排队。