Выполнение cmd файла, содержащегося в папке с пробелом
Я пытаюсь запустить файл cmd, используя JDK7u25 со следующим кодом:
try {
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.directory(workingDir);
proc = pb.start();
} catch (IOException e) {
System.out.println(e.getMessage());
throw e;
}
// StdOut and Err Stream must be read immediatly even if they are not used
// any error message?
StreamInlet error = new StreamInlet(proc.getErrorStream(), "ERROR");
// any output?
StreamInlet output = new StreamInlet(proc.getInputStream(), "OUTPUT");
// kick them off
error.start();
output.start();
if (wait) {
try {
exitCode = proc.waitFor();
} catch (InterruptedException e) {
System.out.println("Waiting for process was interrupted");
}
if (addMetaInfo)
System.out.println("Return value = " + exitCode);
}
где cmd=[cmd.exe, /c, C:\My Root\scripts\windows\tools\MyCLI.cmd, -c, C:\Local Disk D\My Tutorial\RegressionTests.xml, -d, 02_RecordViewer_Test, -l"ERROR"]
Но это не работает, и я получаю следующий вывод.
"C:\My" не распознается как внутренняя или внешняя команда,
работоспособная программа или командный файл.
Я уже внес необходимые изменения в проблему JDK7U21, добавив явный "CMD.EXE /C" перед вызовом файла cmd. Также я использую класс ProcessBuilder, как упоминалось в выпуске JDK7u21.
Он прекрасно работает, если cmd-файл, который я пытаюсь выполнить, находится в C:\MyRoot, то есть в папке без пробела в его имени.
Может кто-нибудь, пожалуйста, помогите?
3 ответа
Вы должны заключить свои пути в кавычки как cmd
требует:
String[] cmd = {"cmd.exe", "/c", "\"C:\\My Root\\scripts\\windows\\tools\\MyCLI.cmd\"", "-c", "\"C:\\Local Disk D\\My Tutorial\\RegressionTests.xml\"",.....};
Обновление, как мы обсуждали в чате, проблема, кажется, ProcessBuilder
передача параметров в cmd.exe
, Но так как у вас есть полный путь к вашему исполняемому файлу, на самом деле cmd.exe
не нужно вообще. Таким образом, команда будет выглядеть так:
String[] cmd = {"\"C:\\My Root\\scripts\\windows\\tools\\MyCLI.cmd\"", "-c", "\"C:\\Local Disk D\\My Tutorial\\RegressionTests.xml\"",.....};
Я только что заметил, что эта проблема уже решена в JDK7u25. Я только что нашел его в примечаниях к выпуску.
Я бы соблазнился изменить обратную косую черту на прямую косую черту и избежать пробелов.
C:/My\ Root/scripts/windows/tools/MyCLI.cmd