私はこのコードを持っています:
File file = new File(path + "\\RunFromCode.bat");
file.createNewFile();
PrintWriter writer = new PrintWriter(file, "UTF-8");
for (int i = 0; i <= MAX; i++) {
writer.println("@cd " + i);
writer.println(NATIVE SYSTEM COMMANDS);
// more things
}
writer.close();
Process p = Runtime.getRuntime().exec("cmd /c start " + path + "\\RunFromCode.bat");
p.waitFor();
file.delete();
実際に実行される前にファイルが削除されます。
これは、.bat
ファイルにネイティブシステムコールのみが含まれているためですか?削除を行うにはどうすればよいですか後.bat
ファイルの実行ですか? (動的に変化するため、.bat
ファイルの出力がどうなるかわかりません)。
start
を使用すると、バックグラウンドでバッチファイルを開始するように求められます_cmd.exe
_:
_Process p = Runtime.getRuntime().exec("cmd /c start " + path + "\\RunFromCode.bat");
_
したがって、Java(_cmd.exe
_)から起動したプロセスは、バックグラウンドプロセスが終了する前に戻ります。
start
コマンドを削除して、フォアグラウンドでバッチファイルを実行します。その後、waitFor()
はバッチファイルの完了を待ちます。
_Process p = Runtime.getRuntime().exec("cmd /c " + path + "\\RunFromCode.bat");
_
OPによると、コンソールウィンドウを使用可能にすることが重要です。これは、@ Noofizが示唆するように、_/wait
_パラメーターを追加することで実行できます。次のSSCCEは私のために働いた:
_public class Command {
public static void main(String[] args) throws Java.io.IOException, InterruptedException {
String path = "C:\\Users\\andreas";
Process p = Runtime.getRuntime().exec("cmd /c start /wait " + path + "\\RunFromCode.bat");
System.out.println("Waiting for batch file ...");
p.waitFor();
System.out.println("Batch file done.");
}
}
_
_RunFromCode.bat
_がEXIT
コマンドを実行すると、コマンドウィンドウが自動的に閉じられます。それ以外の場合、コマンドウィンドウは、EXIT
で明示的に終了するまで開いたままになります。いずれの場合も、ウィンドウが閉じるまでJavaプロセスは待機しています。
start
コマンドの前に/wait
パラメーターを追加してみてください。
waitForProcessOutput()
私たちのためにトリックをしました。
見る:
コード例(SOAPUIで使用)
def process = "Java -jar ext\\selenese-runner.jar".execute()
process.waitForProcessOutput()
def exitValue = process.exitValue()
解答として注釈マークで説明されているコードはいずれも解決策ではありません。
最初の答え
Process p = Runtime.getRuntime().exec("cmd /c start " + path + "\\RunFromCode.bat");
第二の答え
Process p = Runtime.getRuntime().exec("cmd /c " + path + "\\RunFromCode.bat");
第三の答え
public class Command {
public static void main(String[] args) throws Java.io.IOException, InterruptedException {
String path = "C:\\Users\\andreas";
Process p = Runtime.getRuntime().exec("cmd /c start /wait " + path + "\\RunFromCode.bat");
System.out.println("Waiting for batch file ...");
p.waitFor();
System.out.println("Batch file done.");
}
}