我正在尝试从我的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
我看到有些人说他们以前遇到过这个问题,但我找不到如何解决这个问题的答案。
答案 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函数(及其变体)基本上给出了“长名称”(路径和文件名)将为您生成“短名称”。