用Java运行bat文件并等待

时间:2010-03-12 16:27:46

标签: java batch-file exec

你会认为从Java启动一个bat文件是一件容易的事,但是没有...我有一个bat文件,它为一个从文本文件中读取的值循环执行一些sql命令。它或多或少是这样的:

FOR /F %%x in (%CD%\listOfThings.txt) do sqlcmd -Slocalhost\MSSQL %1 %2 -d %3 -i %CD%\SQLScripts\\%%x
exit

不要担心它们不重要的细节。我想要的是简单地从Java中运行这个bat文件,让它等到执行完成。显然这并不容易。到目前为止我所拥有的是:

Runtime.getRuntime().exec("cmd /K start SQLScriptsToRun.bat"
                    +" -U"+getUser()
                    +" -P"+getPass()
                    +" " + projectName);
return true;

问题是exec()方法立即返回。 bat文件运行2-3分钟。我尝试删除开始但无济于事。我尝试了很多变化,但它让我无处可去。关于如何完成这项简单任务的任何想法?

2 个答案:

答案 0 :(得分:13)

您不应忽略.exec()的返回值。它会为您提供Process对象,您可以waitFor(),如下所示:

final Process process = Runtime.getRuntime().exec("blahblahblah");
final int exitVal = process.waitFor();
// if exitVal == 0, the command succeeded

答案 1 :(得分:7)

您需要在流程waitFor调用返回时使用exec