我如何逃避蚂蚁的双引号?

sac*_*hin 31 ant exec

我需要从ant执行以下命令,但我无法弄清楚如何转义双引号:

tasklist /FI "IMAGENAME eq java.exe" /FI "MEMUSAGE gt 50000"
Run Code Online (Sandbox Code Playgroud)

Mic*_*zek 62

Ant使用XML,因此您可以使用普通的XML实体,例如":

tasklist /FI "IMAGENAME eq java.exe" /FI "MEMUSAGE gt 50000"
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案,因为David W.的答案只适用于实际问题. (5认同)

Dav*_* W. 20

如果你使用<arg value>而我不相信你真的这样做<arg line>:

任务列表/ FI"IMAGENAME eq java.exe"/ FI"MEMUSAGE gt 50000"

<exec executable="tasklist">
    <arg value="/FI"/>
    <arg value="IMAGENAME eq java.exe"/>
    <arg value="/FI"/>
    <arg value="MEMUSAGE gt 50000"/>
</exec>
Run Code Online (Sandbox Code Playgroud)

尽管有空格,但<arg value>它会将它作为单个参数发送给命令.除非命令本身需要引号,否则这应该有效.

  • 答案与问题标题不符. (9认同)

小智 20

Ant脚本是xml.所以在xml中,这是规则.

用于>使用 &gt;

对于<使用 &lt;

用来 &quot;

用来 &amp;

用来 &apos;

注意!";"

参考:

http://www.jguru.com/faq/view.jsp?EID=721755

  • 我认为这应被标记为该问题的正确答案 (2认同)

小智 7

但是如果您需要find/CMD exec任务中使用DOS命令,则无效:

<target name="install" depends="install2">
    <exec executable="cmd.exe" outputproperty="result.process">
        <arg line='/c tasklist | find "httpd"'/>
    </exec>
    <echo message="RESULT: ${result.process}" />
</target>
Run Code Online (Sandbox Code Playgroud)

给,

install:
     [exec] Current OS is Windows 7
     [exec] Output redirected to property: result.process
     [exec] Executing 'cmd.exe' with arguments:
     [exec] '/c'
     [exec] 'tasklist'
     [exec] '|'
     [exec] 'find'
     [exec] 'httpd'
     [exec]
     [exec] The ' characters around the executable and arguments are
     [exec] not part of the command.
     [exec] Result: 2
     [echo] RESULT: FIND : format incorrect de paramètre
Run Code Online (Sandbox Code Playgroud)

ANT它就像是在传递给CMD interpereter时删除参数周围的双引号.查找DOS函数的帮助说你需要为你正在寻找的文本使用双引号.