【问题标题】:ANT: Use "," in <arg> without expansion to multiple argumentsANT:在 <arg> 中使用“,”而不扩展为多个参数
【发布时间】:2012-11-30 21:19:17
【问题描述】:

以下 ANT exec 标记的行为与预期不符。

<exec executable="c:\scratch\test.cmd">
    <arg value="A,B,C"/>
</exec>

当执行时,我希望它使用 1 个参数调用 text.cmd。但是,arg 正在扩展为三个单独的参数。

根据手册, value 应该作为单个参数传递内容,但是,它作为三个传递(一个用于字符串的每个组件,用逗号分隔)。

我尝试用分号 (;) 替换命令“,”,但这也不起作用。似乎 arg 的 value 属性将提供的字符串解析为好像它是一个路径,但事实并非如此。

有人知道如何将“A,B,C”作为一个参数传递吗?

为了完整起见,我的 test.cmd 文件是这样的:

@echo off
echo Arg1: %1
echo Arg2: %2
echo Arg3: %3
echo Arg4: %4
echo Arg5: %5
echo Arg6: %6
echo Arg7: %7
echo Arg8: %8
echo Arg9: %9

ant 构建的输出是:

 [exec] Arg1: A
 [exec] Arg2: B
 [exec] Arg3: C
 [exec] Arg4:
 [exec] Arg5:
 [exec] Arg6:
 [exec] Arg7:
 [exec] Arg8:
 [exec] Arg9:

【问题讨论】:

    标签: ant build.xml


    【解决方案1】:

    问题已解决。我非常专注于 ant 中的问题,所以我没有花时间测试 DOS 之类的命令行如何解释命令行参数。

    从 Window 命令行,我运行 test.cmd a,c,b 并看到命令参数被拆分,因此,问题与 ant 无关。所以现在我只需要弄清楚如何强制 ANT 引用参数。

    【讨论】:

    • 对于阅读本文的任何人,只需使用单引号形式将参数括在引号中,以便 xml 解析器忽略双引号,并将其传递给参数字符串: value='"some,text这里”'
    【解决方案2】:

    试试:

    <exec executable="c:\scratch\test.cmd">
        <arg line="A,B,C"/>
    </exec>
    

    请参阅 ant 手册了解 arguments 的工作原理。

    【讨论】:

    • line= 属性表现出与 value= 属性相同的行为。我仍然在我的测试脚本中收到明显不同的参数。
    • 我非常熟悉 apache ant 手册的内容,并且多次查看参数信息以及 exec 任务的页面,试图找到任何暗示逗号将被解释为列表的内容分隔符,因此会将字符串拆分为多个参数。但没有任何关于这个的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 2017-10-31
    • 2010-11-08
    • 1970-01-01
    相关资源
    最近更新 更多