在文件路径中转义空格

时间:2011-09-29 10:52:51

标签: java windows exec whitespace filepath

我正在编写一个小型Java应用程序,我遇到了文件路径问题。

我想用

执行批处理文件

Runtime.getRuntime().exec("cmd /c start c:\program files\folder\file.bat");

但是现在Java因文件路径中的空格而哭泣。

我怎么逃避它?

编辑:

好的,谢谢你的回答。 但我刚遇到一个新问题:

如果我以这种方式启动.bat,它只会打开一个cmd窗口,但没有任何反应。但是,如果我将.bat移动到c:/ folder /而没有空格就行了...... .bat本身也很好。

8 个答案:

答案 0 :(得分:9)

您可以使用带有String []的Runtime#exec来避免此类问题:

Runtime.getRuntime().exec(new String[] {"cmd", "/c", "start", "c:\\program files\\folder\\file.bat"});

这样您就不必担心引用文件名了。但是,您仍然需要担心在文件名中引用\。

答案 1 :(得分:1)

最好不要使用Runtime.getRuntime,而是使用ProcessBuilder

这样你可以得到类似的东西:

List<String> command = new ArrayList<String>();
command.add("first-arg");
command.add("second arg with spaces") //this one will be accepted as a single argument,   eventhough it has spaces

答案 2 :(得分:1)

至少Windows 7的解决方案:

    Runtime.getRuntime().exec("my_program_name.exe \"" + namefile+"\");

想法是将namefile放在字符“。

之间

答案 3 :(得分:0)

我认为因为你的弦中未转义的反斜杠而哭泣。引用文件名。

答案 4 :(得分:0)

引用引号并引用反斜杠:

Runtime.getRuntime().exec("cmd /c start \"c:\\program files\\folder\\file.bat\"");

答案 5 :(得分:0)

使用"

包围文件路径
Runtime.getRuntime().exec("cmd /c start \"c:\\program files\\folder\\file.bat\"");

并正确地逃避路径中的\

答案 6 :(得分:0)

Runtime.getRuntime().exec("cmd /c start \"c:/program files/folder/file.bat\"");

应该有效

答案 7 :(得分:0)

你必须转义斜杠,因此\\并在窗口空格中使用%20转义。我不知道其他系统,可以工作。但首先要做的是\\