2013-04-25 27 views
1

我想通過java會話運行一個命令。該命令包含空格。作爲 "C:\With Space\sample.exe" -command_option "C:\Source File\test.c" 這個工作,如果用java的空格運行cmd

C:\WithoutSpace\sample.exe -command_option "C:\Source File\test.c" 

,如果我們保持引號C:\With Space\sample.exe我們得到的錯誤爲:「文件名,目錄名或卷標語法不正確。」如果我們刪除引號,那麼EXE不運行... 請指導。

感謝,

+0

如果您正在使用'Runtime#exec()',則應該嘗試'ProcessBuilder'。 – afk5min 2013-04-25 12:23:36

+0

你能展示你用來運行命令的代碼嗎? – zakinster 2013-04-25 12:24:49

回答

3

試試這個:

String[] arg = {"cmd","/c","C:/Source File/test.c"}; 
ProcessBuilder pb = new ProcessBuilder(arg); 
Process pr = pb.start(); 

此外,您還可以使用Runtime.exec(String[])版本

例子:

Runtime rt = Runtime.getRuntime(); 
String[] args = { "cmd", "/c", "C:/Source File/test.c"}; 
try 
{ 
    Process proc = rt.exec(processCommand); 
} 
+0

+1使用'ProcessBuilder'。請注意,代碼示例不起作用,因爲'\ S'不是有效的轉義序列:-) – 2013-04-25 12:34:03

+1

「c:/ source file/test.c」或「c:\\ source file \\ test.c」 – user93353 2013-04-25 12:38:30

+0

@ user93353 c:/ source file/test.c – 2013-04-25 12:45:01

0

你可以試試這個:

Process process = Runtime.getRuntime().exec("'C:\WithoutSpace\sample.exe' -command_option 'C:\Source File\test.c'"); 
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())); 

while ((line = in.readLine()) != null) { 
    //line contain command output 
}