2012-07-18 191 views
1

我在JSF應用程序中,我有一個.bat,我想在點擊Command按鈕時啓動,此腳本位於我的項目的webcontent目錄中。 動作的代碼是:在Web應用程序上啓動.bat

public String genererRapportTable() { 
    try { 
    ServletContext ctx = (ServletContext) FacesContext 
     .getCurrentInstance().getExternalContext().getContext(); 
    String realPath = ctx.getRealPath("/"); 
    String[] command = { "cmd.exe", "/C", "start", realPath + "Tools\\cmd.bat" }; 
    Runtime.getRuntime().exec(command); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
    return null; 
} 

的路徑是否正確構建,但劇本沒有啓動!

調試屏幕:

enter image description here

這是我得到的輸出:

enter image description here

所以路徑是正確的,但劇本沒有啓動。當我把.bat放在c:\Tools上時,我使用這個路徑"C:\\Tools\\cmd.bat"它可以工作。 問題是什麼?

回答

1

你能發佈的批處理文件的內容是什麼? 我注意到實際路徑被用作新的命令提示符窗口的標題。這是start指令的誤用的典型行爲(第一個參數是不是可執行文件的路徑,但title新窗口。不要問我,我不知道爲什麼...) 你在使用start批處理文件?

+0

是的是的,我使用過的啓動不跑,我只是試着運行測試! – Potinos 2012-07-18 11:06:08

+0

的java -Xmx512m -jar schemaSpy_5.0.0.jar -t orathin -db nrefurg -host colline2 -port 1533 -s GA_ADM -u ga_adm -p ga_adm -o DOC -dp ojdbc-14.jar -i DOC -GV「Graphviz_2。 28「-hq – Potinos 2012-07-18 11:08:04

+1

就像@jeb評論的那樣,你需要添加標題參數(第一個參數)。在命令提示符下檢查'start /?'並驗證語法。 – Cascader 2012-07-18 11:36:04

1

如果您使用開始運行您的批處理,您需要將帶引號的標題作爲第一個參數,因爲您的路徑包含空格並且也將被引用。
啓動命令始終使用第一個帶引號的參數作爲標題。

start "myTitle" cmd.exe /c myBat.bat 

像這樣的東西應該工作
String[] command = { "cmd.exe", "/C", "start", "\"myTitle\" \""+realPath + "Tools\\cmd.bat\""};

還應該重命名cmd.bat到一個更好的名字,所以不能用cmd.exe的碰撞。

+0

但使用時正確運行: 字符串[]命令= { 「cmd.exe的」, 「/ C」, 「啓動」, 「C:\\工具\\ cmd.bat」}; Runtime.getRuntime()。exec(command); 此ID cmd.bat存在於c:\ Tools \ 只有當我在服務器目錄上試用這個問題時! – Potinos 2012-07-18 11:36:08

+1

我想這是因爲'C:\ Tools \ cmd.bat'不包含空格 – jeb 2012-07-18 12:26:49

+0

是的,它是空間,我怎麼能逃脫它? – Potinos 2012-07-18 13:56:28