2013-06-17 9 views
10

でEXEC)(Runtime.getRuntimeにスペースを持つ:。私はこれらの線に沿ってJavaで実行する必要があるコマンドを持っている2つの実行ファイル

C:\path\that has\spaces\plink -arg1 foo -arg2 bar "path/on/remote/machine/iperf -arg3 hello -arg4 world" 

パスにはスペースがない場合、このコマンドは正常に動作しますが、私がスペースを持っていると、それを動作させることができないようです。私は、Java 1.7

String[] a = "C:\path\that has\spaces\plink", "-arg1 foo", "-arg2 bar", "path/on/remote/machine/iperf -arg3 hello -arg4 world" 
Runtime.getRuntime().exec(a); 

など

String[] a = "C:\path\that has\spaces\plink", "-arg1 foo", "-arg2 bar", "path/on/remote/machine/iperf", "-arg3 hello", "-arg4 world" 
Runtime.getRuntime().exec(a); 

を実行するには、次のことを試してみました。しかしどちらもが何かをやっているように見えるん。私が間違ってやっていることについてのどんな考え?

+0

一般的なアドバイスとして、[Runtime.exec() (http://www.javaworl d.com/jw-12-2000/jw-1229-traps.html)。それは問題を解決するかもしれない。そうでない場合は、失敗した理由に関する詳細情報を提供する必要があります。次に、 'exec'を参照していることを無視し、' ProcessBuilder'を使って 'Process'をビルドします。 'String arg'を' String [] args'に分解して、それ自体がスペースを含む引数を考慮します。 –

答えて

16

コマンドに渡す各引数は、別々のString要素である必要があります。

は、だから、コマンド列は
String[] a = new String[] { 
    "C:\path\that has\spaces\plink", 
    "-arg1", 
    "foo", 
    "-arg2", 
    "bar", 
    "path/on/remote/machine/iperf -arg3 hello -arg4 world"}; 

各要素は今

args変数プログラム私はまた、大幅に、使用することをお勧めします内の個々の要素として表示されます...のような、よりになりますProcessBuilderの代わりに、設定が簡単で、いくつかのコマンドをラップする必要はありません。"\"...\""

関連する問題