我在Windows机器上有一个批处理文件。 它的路径是在其中有空格。例如。 C:\ Hello World \ MyFile.bat
我正在尝试通过java执行批处理文件:
Runtime.getRuntime().exec(dosCommand + destinationFilePath + batch)
但是,由于路径有空格,因此它表示“C:\ Hello”不是有效的命令或目录。
我也试过了:
完整命令: cmd /c start /wait "C:/Hello World/MyFile.bat"
它会打开命令提示符,但不会转到文件夹Hello World并且不会执行bat文件
我该如何处理这种情况。 如果有任何其他信息,请告诉我。是必需的。
答案 0 :(得分:1)
使用引号("C:\Hello World\MyFile.bat"
)应该可以解决问题。在Java中,您必须使用\
(String batch = "\"C:\Hello World\MyFile.bat\""
)来引用引号。
答案 1 :(得分:1)
我能够使用ProcessBuilder解决它。 bat文件所在的目录可以添加到工作目录中:
processBuilder.directory(新文件(“C:\ hello world \”));
这就像宝石一样。
int result = 1;
final File batchFile = new File("C:\\hello world\\MyFile.bat");
final File outputFile = new File(String.format("C:\\hello world\\output_%tY%<tm%<td_%<tH%<tM%<tS.txt", System.currentTimeMillis()));
final ProcessBuilder processBuilder = new ProcessBuilder(batchFile.getAbsolutePath());
processBuilder.redirectErrorStream(true);
processBuilder.redirectOutput(outputFile);
processBuilder.directory(new File("C:\\hello world\\"));
try {
final Process process = processBuilder.start();
if (process.waitFor() == 0) {
result = 0;
}
System.out.println("Processed finished with status: " + result);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
答案 2 :(得分:0)
您是否试图逃避路径周围的引号,例如:
Runtime.getRuntime().exec(dosCommand + "\"" + destinationFilePath + batch + "\"")
答案 3 :(得分:0)
我刚刚使用ProcessBuilder
解决了这个问题,但是我给目录提供了一个空格processBuilder.directory
并使用bat文件名运行命令。
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "start", "/wait", "export.bat");
pb.directory(new File(batDirectoryWithSpace));
pb.redirectError();
try {
Process process = pb.start();
System.out.println("Exited with " + process.waitFor());
}
catch (IOException | InterruptedException ex) {
Exceptions.printStackTrace(ex);
}