Java运行命令行,其中包含空格

La *_*bla 3 java command-line cmd batch-file

我正在尝试从我的Java应用程序运行.bat文件.我已经尝试了所有可以找到的方法,但似乎都没有.

问题是包含空格的.bat文件的路径.

我现在正在使用这个方法,所以我可以在Eclipse控制台中看到结果

我的实际代码是:

Runtime rt = Runtime.getRuntime();
String processString = "cmd /c \"" + homeFolder.getAbsolutePath() + SETUP_FILE + "\" \"" + homeFolder.getAbsolutePath() + "\"";
    try {
        Process proc = rt.exec(processString);
    ...
    }
Run Code Online (Sandbox Code Playgroud)

我试过转义引号,没有转义引号,将字符串分隔成String[]并将每个空格分隔命令放在自己的单元格中:

{ "cmd", "/c", \"" + homeFolder.getAbsolutePath() + SETUP_FILE + "\" ... };
Run Code Online (Sandbox Code Playgroud)

再次,有和没有逃避引号:没有任何作用.

我也尝试过硬编码数组和字符串的路径.每次都有相同的结果.

homeFolder = C:\Users\La bla bla\workspace\ToolMaker\bin\
SETUP_FILE = setup.bat
Run Code Online (Sandbox Code Playgroud)

整个命令是这样的:

cmd /c "C:\Users\La bla bla\workspace\ToolMaker\bin\setup.bat" "C:\Users\La bla bla\workspace\ToolMaker\bin"
Run Code Online (Sandbox Code Playgroud)

再次,有或没有引号,相同的输出:

Output: 
Error: 'C:\Users\La' is not recognized as an internal or external command,operable program or batch file.
Run Code Online (Sandbox Code Playgroud)

显然我在Windows上运行(7,64位专业).Java 7

我看到有一些人说他们以前遇到过这个问题,但我找不到如何绕过这个问题的答案.

pb2*_*b2q 8

使用的版本Runtime.exec(String[])需要String[]:

Runtime rt = Runtime.getRuntime();
String[] processCommand = { "cmd", "/c", path };

try
{
    Process proc = rt.exec(processCommand);
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这对我有用(Win7):

Runtime rt = Runtime.getRuntime();
String[] processCommand = { "cmd", "/c", "c:" + File.separatorChar + "dir with spaces" + File.separatorChar + "test.bat" };

System.out.println("xPATH: " + processCommand[2]);

Process p = rt.exec(processCommand);
// output of the command is as expected
Run Code Online (Sandbox Code Playgroud)

如果我\明确使用,这也有效:

String[] processCommand = { "cmd", "/c", "c:\\dir with spaces\\test.bat" };
Run Code Online (Sandbox Code Playgroud)