2012-02-14 13 views
1

同じ質問をもう一度開けば申し訳ありません。私は プロセスビルダーを使用して2つの異なるコマンドを実行する方法

  1. 2つのコマンドを実行しますD:\ cygwinのを\ビン\テスト

  2. のsh app.sh AK-RD 02.20 D:\ cygwinの\ binに\ TEST_FILES

  3. 以上

私は同じコマンドプロンプトで実行したい2つのコマンドですD:\ cygwin \ bin \ Testフォルダと同じプロンプトで次のコマンドを実行したい

のsh app.sh AK-RD 02.20 D:\ cygwinの\ binに\ TEST_FILES

コマンドは次のようになります、

コマンド: - D:\ cygwinの\ビン\テスト> shをapp.sh AK-RD 02.20 D:¥cygwin¥bin¥Test_files

javaのプロセスビルダを使用してこれを行う方法。あるいはこれを行うための他の方法がありますか?

String cmd; 
    cmd = "sh app.sh AK-RD 02.20 D:\\cygwin\\bin\\Test_files"; 
    ProcessBuilder probuilder = new ProcessBuilder(cmd); 
    probuilder.directory(new File("D:\\cygwin\\bin\\Test")); 
    Process process = probuilder.start(); 

これは私がコードでprobuilder.directoryを変更しても、私を助けていません。私は、あなたが作業ディレクトリを設定する

ProcessBuilder pb = new ProcessBuilder(); 
pd.directory(new File("D:\\cygwin\\bin\\Test")); 

を呼び出すことができます

Cannot run program "'sh app.sh AK-RD 02.20 D:\\cygwin\\bin\\Test_files CreateProcess error=2, The system cannot find the file specified 

答えて

0

にあなたのコマンドを分割することができ、エラーは、システムがパスにファイルsh app.sh AK-RD 02.20 D:\\cygwin\\bin\\Test_files.exeを見つけることができないことを意味します。

これは、ProcessBuilderが、文字列全体(バックスラッシュやスペースなどを含む)をコマンド名として解釈することを意味します。これはあなたが望むものではありません。

スプリット個々の単語にコマンド:

ProcessBuilder pb = new ProcessBuilder("sh", "app.sh", "AK-RD", "02.20", "D:\\cygwin\\bin\\Test_files"); 

、正しいディレクトリにCDからpb.directory()を使用しています。

また、BAT/CMDスクリプトにすべてをかけるとProcessBuilder

0

を取得しています。

編集:

あなたはまた、試してみて、引数

String cmd[] = new String[5]; 
cmd[0] = "sh"; 
cmd[1] = "app.sh"; 
cmd[2] = "AK-RD"; 
cmd[3] = "02.20"; 
cmd[4] = "D:\\cygwin\\bin\\Test_files"; 
+0

とuは私はエラーのCreateProcessエラー= 2を取得していますので、それがどうあるべきかを正確に伝えることができることを実行して、システムファイルが、私は「 –

+0

を指定見つけることができませんコマンドを引数に分割しないと何か変わった動作が見られました。分裂はあなたのために働いていますか?まだ愛はありませんか? – ughzan

関連する問題