如何处理Windows批处理文件路径中的空格?
我在Windows机器上有一个批处理文件。 同样的道路上有空间。例如。 C:\的Hello World \ MyFile.bat如何处理Windows批处理文件路径中的空格?
我试图通过Java来执行批处理文件:
Runtime.getRuntime().exec(dosCommand + destinationFilePath + batch)
但是,作为路径中有空格,它说: “C:\你好” 是不是一个有效的命令或目录。
我想这太:
完成命令:cmd /c start /wait "C:/Hello World/MyFile.bat"
它打开命令提示符,但不进入该文件夹的Hello World,并且不执行批处理文件
如何处理这情况。 让我知道是否有任何额外的信息。是必须的。
我能够使用的ProcessBuilder来解决它。 bat文件存在的目录可以添加到工作目录中,如下所示:
processBuilder.directory(new File(“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();
}
使用引号("C:\Hello World\MyFile.bat"
)应该做的伎俩。在Java中,你必须使用\
(String batch = "\"C:\Hello World\MyFile.bat\""
)来引用引号。
我正好想这太。完整的命令:cmd/c start/wait“C:/ Hello World/MyFile.bat”它打开命令提示符,但不进入文件夹Hello World,也不执行bat文件 – vijayinani 2015-02-24 10:09:30
你尝试逃避周围的路径引号如:
Runtime.getRuntime().exec(dosCommand + "\"" + destinationFilePath + batch + "\"")
我也试过这个。 完整的命令:cmd/c start/wait“C:/ Hello World/MyFile.bat” 它打开命令提示符,但不进入文件夹Hello World,也不执行bat文件。 – vijayinani 2015-02-24 10:06:48
你必须在文件路径 – Eric 2015-02-24 10:45:05
中使用双反斜杠而不是斜杠。不起作用。一样。打开cmd提示符。但是,不执行批处理。下面给出了解决方案。 – vijayinani 2015-02-24 11:14:21
我只是用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);
}
尝试使用[的ProcessBuilder(https://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html) – McDowell 2015-02-24 09:58:34