通过使用
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,重要的是要有可用的控制台窗口-这可以通过添加
/wait参数来完成,如@Noofiz所建议。以下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进程一直在等待,直到在两种情况下都关闭了窗口。



