我正在编写一个小型Java应用程序,我遇到了文件路径问题。
我想用
执行批处理文件 Runtime.getRuntime().exec("cmd /c start c:\program files\folder\file.bat");
但是现在Java因文件路径中的空格而哭泣。
我怎么逃避它?
编辑:
好的,谢谢你的回答。 但我刚遇到一个新问题:
如果我以这种方式启动.bat,它只会打开一个cmd窗口,但没有任何反应。但是,如果我将.bat移动到c:/ folder /而没有空格就行了...... .bat本身也很好。
答案 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
转义。我不知道其他系统,可以工作。但首先要做的是\\
。