Как правильно вызвать файл CMD в JAVA на Windows? - PullRequest
0 голосов
/ 17 января 2012

У меня есть пример кода Java, как показано ниже.

    String testEfdDirectoryPath="D:\\test";
    String efdExecutable = "test.cmd";
    File executableFile = new File(testEfdDirectoryPath, efdExecutable);
    ProcessBuilder pb=new ProcessBuilder();
    $$pb.command("cmd.exe","/C",executableFile.toString());$$
    pb.directory(new File(testEfdDirectoryPath));
    Process p=pb.start();
    int code=p.waitFor();
    System.out.print(code);

В test.cmd фактически есть вызов другого приложения Java.Если я не изменю помеченную $$ строку на следующую, чтобы перенаправить вывод, другое Java-приложение не может быть запущено.

    pb.command("cmd.exe","/C",executableFile.toString(),">output.txt");

У вас, ребята, есть идеи?Заранее спасибо.:)

Ответы [ 2 ]

2 голосов
/ 17 января 2012

Производит ли ваш дочерний процесс много выходных данных (более нескольких килобайт)? Если это так, вам нужно прочитать этот вывод процесса. Вам следует попробовать:

  1. начать процесс
  2. закрыть stdin процесса, поэтому pb.getOutputStream().close()
  3. повторно прочитано из pb.getInputStream() и поток ошибок

Это может быть возможно в одном потоке или в нескольких потоках. В любом случае, вы должны просто взять приведенное выше объяснение в виде списка ключевых слов и попытаться найти пример фрагмента кода, которому вы можете доверять, предпочтительно в приложении с открытым исходным кодом, которое успешно делает это.

Может быть http://commons.apache.org/exec/ может вам помочь.

0 голосов
/ 17 января 2012

Windows не может выполнять сценарии напрямую;когда вы дважды щелкаете файл .cmd, он фактически открывает файл в cmd.exe .Так что попробуйте cmd.exe E:\\test\\test.cmd.

...