2012-05-04 11 views
1

これは私が達成しようとしているものです: JAVAプログラムからバッチファイルを実行してください。バッチは特定のフォルダに新しいファイルを作成し、フォルダ 'A'としましょう。新しいファイルが作成されると、JAVAプログラムは新しく作成されたファイルをフォルダ 'A'からフォルダ 'B'に移動します。続きバッチで作成されたファイルに対して操作を実行できません

は、コードスニペットです:

// Run a batch that creates a file 
String[] cmd = new String[]{"cmd", "/C", "start /min" + batchFilePath + batchFileName}; 
Process proc = Runtime.getRuntime().exec(cmd); 
proc.waitFor(); 


// Command in the batch file 

dir c:\ > C:\Chen_Med\EDICron\EDIOUT\test.edi 
exit 

// Move the file created by batch 
boolean result2= ediOutFile.renameTo(new File(processedFolder, ediOutFile.getName())); 

は、これは私が上記のコードを実行したときに何が起こるかです: 新しいファイルは、フォルダ「A」で作成されます。ただし、新しく作成されたファイルはフォルダ 'B'に移動されません。

分析:

上記のコードには構文上の問題はありません。 ファイルを移動する代わりに試しました。つまり、フォルダ 'A'からフォルダ 'B'に読み書きした後、フォルダ 'A'からファイルを削除します。新しいファイルがフォルダ 'B'に作成されますが、ファイルはフォルダ 'B'から削除されません。 ファイルを移動しようとする別のプログラムを実行すると、上記のプログラムが実行された後に動作します。つまり、ファイルに対する制御を保持しているランタイムに問題があるようです。

解決策を教えてください。すなわち、cmd.exeは、バッチファイルを実行するための第二のプロセスを作成している、と - 私はあなたが非同期的に開始している、バッチファイルを起動するcmd /c start ...を使用することにより

+1

Java 7+を使用している場合:http://docs.oracle.com/javase/tu torial/essential/io/move.html – assylias

答えて

3

:(ソリューションを理解しようと私の一日無駄にしていますproc.waitFor()はなく、バッチファイル自体のため、元cmd.exeを待っている。バッチファイルはその後、Javaプログラムと並行して実行され、ファイルがさえ作成される前に、Javaからファイルの名前を変更しようとする試みが発生した。

代わりにcmd /c batch.batを使用してください。これは正常に動作します。

+0

「開始」パラメータを削除すると、バッチがまったく実行されませんでした。 – user1375124

+0

'/ min'も削除する必要があります。これは間違いなく正しい方法なので、最初にうまくいかない場合は、あきらめないでください。 –

+0

/分を取り除いても機能しませんでした。 – user1375124

関連する問題