在Java中运行.bat文件

时间:2014-05-06 13:21:50

标签: java windows batch-file

我目前正在尝试用Java执行.bat文件。 bat文件实际上运行完美,但在执行后,我的主程序退出。我不知道为什么,一旦bat文件被执行,我需要它继续使用它的代码。程序和bat文件都将在Windows上运行。以下是我如何运行bat文件的代码:

if(!running) {
   @SuppressWarnings("unused")
   Process process = Runtime.getRuntime().exec("cmd /c start "+localTargetInPath+"\\startBatchClient.bat");

   process.getInputStream().close();
   process.getOutputStream().close();
   process.getErrorStream().close();
}
//wait to allow batch client to start up
Thread.sleep(1000);

我一直试图弄清楚这几天没有运气。有什么想法吗?

编辑:

只是为了澄清答案中陈述的内容:

关键是要做到以下几点:

  1. 运行批处理文件
  2. 批处理文件启动批处理客户端
  3. Java程序继续运行
  4. Java程序连接到正在运行的批处理客户端
  5. 编辑2:

    这是批处理文件的内容(它再次运行应用程序没有任何问题:

    set JAVA_HOME="C:\Program Files\Java\jdk1.6.0_23"
    set ep_root=C:\app\plm\e6_1_1\P2\BatchClient
    set axalant_root=C:\app\plm\e6_1_1\P2\BatchClient\axalant
    set batchcli_root=C:\app\plm\e6_1_1\P2\BatchClient
    set EP_MACH=intel-ms-nt4.0
    
    C:\Windows\system32\cmd.exe /K c:\app\plm\e6_1_1\P2\BatchClient\axalant\cmd\batchclient_nowrapper.cmd  -eciservermode -p %localInPath%\batchClient.properties -T C:\zftmp\svc.emea.batch11e\testclient.properties
    

3 个答案:

答案 0 :(得分:0)

如果您不需要同时执行任何操作,则可以在Process中使用waitFor函数。您可能遇到的问题是您当前的线程不会等待批处理线程完成。

答案 1 :(得分:0)

Runtime.exec()方法会生成一个进程,但不会等待它完成。

您应该在返回的waitFor()实例上使用Process方法,以便等待进程结束。

另外,@ ixe013的评论是正确的:您应该从命令中删除start字,因为它会产生另一个进程。如果您不删除start,则waitFor()对您没有多大帮助:它将等待start命令结束,这是即时的。

答案 2 :(得分:0)

怎么样:

File batchFile = new File("path\script.bat");
ProcessBuilder processBuilder = new ProcessBuilder(batchFile.getAbsolutePath());
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
int exitStatus = process.waitFor();
System.out.println("Processed finished with status: " + exitStatus);