2013-07-11 74 views
1

下面的語句正常工作。這是代碼。的Java進程生成命令錯誤,轉義雙引號

//some code 
String wmic_cmd = "Process Call Create"; 
String wmic2 = " \"cmd /c echo 'Required_Info' %SystemDrive% %SystemRoot% \""; 
cmdTokens.add(wmic_cmd); 
cmdTokens.add(wmic2); 
/*debug and checked the value of cmdTokens array - it was 
[wmic, /node:10.0.0.0, /user:Someuser, /password:PWD, Process Call Create, "cmd /c echo 'Required_Info' %SystemDrive% %SystemRoot% "] 
*/ 
ProcessBuilder pb = new ProcessBuilder(cmdTokens.toArray(new String[]{})); 
Process proc = pb.start(); 

當我檢查PROC的錯誤流我得到以下 -

Process Call Create - Alias not found. 

這表明了WMIC語法錯誤。因此,在將命令字符串數組發送給進程生成器時發生了某些錯誤。

任何想法??

+0

閱讀(並實現)*所有* [Runtime.exec()不會](http://www.javaworld.com/jw-12-2000/jw-1229-traps.html)的建議* 。這可能會解決問題。如果不是,它應該提供更多關於失敗原因的信息。然後忽略它引用'exec'並(繼續)使用'ProcessBuilder'構建'Process'。還要將'String arg'分解爲'String [] args'來解釋其本身包含空格的參數。 –

回答

2

鑑於你的命令行和你想要做什麼,這不是如何做到這一點。用途:

final List<String> cmd = Arrays.asList("wmic", "/node:IP", "/user:Someuser", 
    "/password:PWD", "Process", "Call", "Create", 
    "cmd /c echo 'Required_Info' %SystemDrive% %SystemRoot%" 
) 

// build processBuilder using cmd.toArray(new String[cmd.size()]) as a command 

cmd /c echo etc周圍的報價是否有防止命令解釋分隔參數。當您傳遞原始參數時,無需複製它們,這就是您使用的ProcessBuilder

+0

謝謝......不知道processbuilder中的參數邏輯。 – ayush