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

时间:2012-08-06 00:19:32

标签: java command-line batch-file cmd

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

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

我现在正在使用this方法,所以我可以在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

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

2 个答案:

答案 0 :(得分:8)

使用String[]的版本Runtime.exec(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" };

答案 1 :(得分:0)

我遇到了类似的问题,但我使用的是start参数,因此它可能不是“完全”相同的问题。

cmd不喜欢扩展目录名称(我不知道为什么个人,我只是知道它没有)。它将需要“缩短”(8.2)名称

这意味着wallpaper.jpg需要成为WALLPA~1.JPG

在这里,你遇到了一个问题。如果您有多个wallpaper*.*个文件,您想要哪个文件会发生什么?

现在,为了让它在Windows下正常工作,你将不得不降低到本机级别。

有一个名为GetShortPathName的Windows函数(及其变体)基本上给出了“长名称”(路径和文件名)将为您生成“短名称”。