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);
    ...
    }
我试过转义引号,没有转义引号,将字符串分隔成String[]并将每个空格分隔命令放在自己的单元格中:
{ "cmd", "/c", \"" + homeFolder.getAbsolutePath() + SETUP_FILE + "\" ... };
再次,有和没有逃避引号:没有任何作用.
我也尝试过硬编码数组和字符串的路径.每次都有相同的结果.
homeFolder = C:\Users\La bla bla\workspace\ToolMaker\bin\
SETUP_FILE = setup.bat
整个命令是这样的:
cmd /c "C:\Users\La bla bla\workspace\ToolMaker\bin\setup.bat" "C:\Users\La bla bla\workspace\ToolMaker\bin"
再次,有或没有引号,相同的输出:
Output: 
Error: 'C:\Users\La' is not recognized as an internal or external command,operable program or batch file.
显然我在Windows上运行(7,64位专业).Java 7
我看到有一些人说他们以前遇到过这个问题,但我找不到如何绕过这个问题的答案.
使用的版本Runtime.exec(String[])需要String[]:
Runtime rt = Runtime.getRuntime();
String[] processCommand = { "cmd", "/c", path };
try
{
    Process proc = rt.exec(processCommand);
    // ...
}
这对我有用(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
如果我\明确使用,这也有效:
String[] processCommand = { "cmd", "/c", "c:\\dir with spaces\\test.bat" };