3

我正在尝试从我的 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 位专业版)上运行。爪哇 7

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

4

2 回答 2

8

使用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" };
于 2012-08-06T00:25:33.743 回答
0

我有一个类似的问题,但我使用的是start参数,所以它可能不是“完全”相同的问题。

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

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

在这里,您遇到了问题。如果您有多个wallpaper*.*文件,您想要哪个文件会怎样?

现在,要使其在 Windows 下正常工作,您将不得不降低到本机级别。

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

于 2012-08-06T00:26:20.780 回答