其中包含空格的Java运行命令行(Java run command line which conta

2019-09-20 20:00发布

我想逃离我的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中

我看见有几个人说,他们在此之前的问题,但我无法找到如何让周围的答案。

Answer 1:

使用该版本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" };


Answer 2:

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

cmd不喜欢扩展目录名(我不知道为什么就个人而言,我只知道事实并非如此)。 它会希望“缩短”(8.2)名称,而不是

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

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

现在,为了得到这个在Windows下正常工作,你将不得不坐下来的母语水平。

有一个称为一个Windows函数GetShortPathName (及变种),这基本上给出了“长名称”(路径和文件名)会产生“短名”为您服务。



文章来源: Java run command line which contains spaces