我有这段代码:
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
文件的输出是什么,因为它会动态更改。
答案 0 :(得分:47)
使用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,让控制台窗口可用非常重要 - 这可以通过添加{@ 1}}参数来完成,如@Noofiz所建议的那样。以下SSCCE为我工作:
/wait
如果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
显式退出它 - 在任何一种情况下,java进程都会等待窗口关闭。
答案 1 :(得分:5)
尝试在/wait
命令前添加start
参数。
答案 2 :(得分:3)
waitForProcessOutput()
为我们做了诀窍。
请参阅:
代码示例(在SOAPUI中使用)
def process = "java -jar ext\\selenese-runner.jar".execute()
process.waitForProcessOutput()
def exitValue = process.exitValue()
答案 3 :(得分:3)
评论中描述的所有代码都不是解决方案。
第一个答案
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.");
}
}