web-dev-qa-db-ja.com

アリで二重引用符をエスケープするにはどうすればよいですか?

Antから次のコマンドを実行する必要がありますが、二重引用符をエスケープする方法がわかりません。

tasklist /FI "IMAGENAME eq Java.exe" /FI "MEMUSAGE gt 50000"
29
sachin

<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>

スペースにもかかわらず、<arg value>はそれを単一のパラメーターとしてコマンドに送信します。コマンド自体が引用符を必要としない限り、これは機能するはずです。

19
David W.

AntはXMLを使用するため、&quot;などの通常のXMLエンティティを使用できます。

tasklist /FI &quot;IMAGENAME eq Java.exe&quot; /FI &quot;MEMUSAGE gt 50000&quot;
61
Michael Mrozek

Antスクリプトはxmlです。したがって、xmlでは、ここにルールがあります。

For> use &gt;

<使用&lt;

&quot;を使用

使用する&amp;

&apos;を使用

通知! 「;」

参照:

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

19
user890054

ただし、/CMD execタスクでfind 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>

与える、

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

ANTがCMDインターペリターに渡されるときにパラメーターを囲む二重引用符を削除する場合と同様です。 DOSの検索機能のヘルプには、探しているテキストに二重引用符を使用する必要があると書かれています。

7
sqaopen

以下に例を示します http://ant.Apache.org/faq.html#Shell-redirect-2 。単純に単一引用符をxmlパラメーターセパレーターとして使用します。この方法では、引数内で二重引用符を自由に使用できます。

3