ProcessBuilder无法在路径中运行带空格的bat文件

我有以下代码段来运行bat文件:

String workingDir = System.getProperty("user.dir"); ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "\"" + workingDir + File.separator + "midl.bat\""); Process ddsBuildProc = pb.start(); ddsBuildProc.waitFor(); 

workingDir包含路径中的空格。 虽然我使用引号括起workingDir + fileName字符串,但shell仍会拆分workingDir并且不运行bat文件。 如果手动尝试并复制粘贴 – 在Windows命令窗口中执行bat文件路径字符串,它将按预期工作。 这可能是什么问题?

此外,请不要将此问题视为重复,因为我在其他问题中尝试了所有解决方案但没有成功。

  • 不要在命令列表中引用命令,除非执行的命令需要它,这只会填充一些内容
  • user.dir是你的程序当前正在执行的上下文……所以包含它实际上是没有意义的,你可以midl.bat使用midl.bat (假设命令存在于当前执行上下文中)

我写了一个非常简单的批处理文件……

 @echo off dir 

我把它放在我的“C:\ Program Files”目录中,因为我需要一个带空格的路径并使用….

 import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.logging.Level; import java.util.logging.Logger; public class RunBatch { public static void main(String[] args) { ProcessBuilder pb = new ProcessBuilder( "cmd", "/c", "listme.bat" ); pb.directory(new File("C:/Program Files")); pb.redirectError(); try { Process process = pb.start(); InputStreamConsumer.consume(process.getInputStream()); System.out.println("Exited with " + process.waitFor()); } catch (IOException | InterruptedException ex) { ex.printStackTrace(); } } public static class InputStreamConsumer implements Runnable { private InputStream is; public InputStreamConsumer(InputStream is) { this.is = is; } public static void consume(InputStream inputStream) { new Thread(new InputStreamConsumer(inputStream)).start(); } @Override public void run() { int in = -1; try { while ((in = is.read()) != -1) { System.out.print((char) in); } } catch (IOException exp) { exp.printStackTrace(); } } } } 

运行它没有任何问题……