2016-10-03 40 views
0

我需要傳遞帶空格的參數給包裝在批處理文件中的命令。我需要在java中觸發我的代碼。需要使用空格將參數傳遞給包含在批處理文件中的命令java

我試圖通過雙引號中的參數,但它仍然採取與空格引號內的值,因此無法執行命令。 包裹在批處理文件中的命令是 - MSEND -n {服務器} -a {事件} -b 「mc_object_class =%PAR1%; mc_parameter =%PAR2%; support_group =%PAR3%」

化java方法我用來觸發相同的是 - Process process = new ProcessBuilder(「C:/test.bat」,「\」「+ object_class +」\「」,「\」「+ mc_parameter +」\「」,「 \ 「」 + support_grp + 「\」「)開始();

帶引號和不帶引號的參數在Java中被視爲相同,而從命令提示符下,它可以正常使用雙引號。需要知道使用ProcessBuilder方法傳遞參數的方法。

Runtime.getRuntime()。exec()方法也給出相同的錯誤。我的工作在這一點上停滯不前。

任何幫助將不勝感激。

+2

[在含有多個空間參數的Runtime.exec](http://stackoverflow.com/questions/6686592/runtime-exec-on-argument-containing-multiple-spaces) – Joe

+1

打開命令的可能的複製提示窗口並運行'call /?'。在輸出幫助中,您可以閱讀如何引用批處理文件中調用批處理文件時使用的參數(參數)。 '%par1%','%par2%'和'%par3%'肯定是錯誤的,right就是'%〜1','%〜2'和'%〜3'。 – Mofi

回答

1

我不知道你的批處理文件裏面是否改變了參數。對於這個答案,我將直接使用輸入參數(%1%3),但刪除需要從java代碼傳遞的雙引號(%~1%~3)(因此參數被正確標記),但是我們不會需要在msend的論點。

但是問題是空間在命令中沒有正確處理。 msend文檔指出,在文本字段中帶空格或標點符號的參數在雙引號內需要單引號。

msend -n {server} -a {event} -b "mc_object_class='%~1';mc_parameter='%~2';support_group='%~3'" 
               ^...^    ^...^    ^...^ 
           ^............................................................^ 
+0

非常感謝!這個單引號解決了我的問題。 – SDS