Запустите bat файл на Java и подождите - PullRequest
5 голосов
/ 12 марта 2010

Можно подумать, что запуск файла bat из Java будет простой задачей, но нет ... У меня есть файл bat, который выполняет некоторые команды sql для цикла значений, считываемых из текстового файла. Это более или менее так:

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

Не беспокойтесь о специфике, они не важны. Я хочу просто запустить этот bat-файл из Java и дождаться окончания выполнения. Видимо это не легко. Что у меня есть, так это:

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

Проблема в том, что метод exec () возвращается немедленно. Файл летучей мыши работает в течение 2-3 минут. Я пытался удалить начало, но безрезультатно. Я перепробовал много вариантов, но это ни к чему не привело. Любые идеи о том, как сделать это простое задание?

Ответы [ 2 ]

14 голосов
/ 12 марта 2010

Не следует игнорировать возвращаемое значение .exec(). Он дает вам Process объект, который вы можете waitFor(), например:

final Process process = Runtime.getRuntime().exec("blahblahblah");
final int exitVal = process.waitFor();
// if exitVal == 0, the command succeeded
7 голосов
/ 12 марта 2010

вам нужно использовать waitFor в процессе exec возврат вызовов.

...