2010-09-10 51 views
0

我想在我的Java應用程序中執行批處理文件。代碼如下:在Java中執行批處理文件的問題

Runtime.getRuntime().exec("cmd /C start C:/Documents and Settings/Zatko/My Documents/Project-Workspace/IUG/external/apps/archive/run-server.bat"); 

當執行時,一個錯誤對話框出現,告訴「Windows無法找到‘C:/文件’。請確保您corretly鍵入的名字......」

當我用相同的代碼執行另一個批處理文件,命名爲file.bat,並位於C:/ Temp文件夾中,它可以很好地工作....

有沒有人知道問題出在哪裏?它是關於間隔字符嗎?

在此先感謝

回答

2

編輯:

似乎開始命令需要時啓動可執行文件路徑被封閉在一個額外的參數這個「作爲一個必須圍繞它通過包含空格的參數。」有點令人困惑,因爲當一個路徑沒有空格時,起始命令的作用就是例外,因此並沒有將它包含在內。「當我測試下面的代碼文件夾c:/ temp並且它沒有額外的工作時會發生這種情況參數

負責的參數是窗口的標題,我打開了。它必須來第二個參數,如果它包含空格必須包圍「。

我建議始終使用」爲標題和路徑。

因此,這裏是更新的命令:

你需要附上

C:/文件和設置/ ...

與「爲文件名包含空格和您需要在使用帶有參數的start命令時包含標題。

對於Java,這將是:

調用Runtime.getRuntime()EXEC( 「CMD/C 啓動\」 服務器\ 「\」 C:/ Documents和 設置/ Zatko /我 文檔/Project-Workspace/IUG/external/apps/archive/run-server.bat \ 「」);如果你有一個空格

String[] array = { ... }; 
Runtime.getRuntime().exec(array); 

String[] array = { "cmd", "/C", "start", 
    "C:/Documents and Settings/Zatko/My Documents/.../run-server.bat" }; 
Runtime.getRuntime().exec(array); 

使用數組是尤爲重要:

格爾茨, GHAD

+0

我確實按照說明操作。但是,當我運行代碼時,出現DOS命令窗口,光標閃爍在 C:\ Documents and Settings \ Zatko \ My Documents \ Project-Workspace \ IUG \> – Anto 2010-09-10 15:05:02

+0

檢查您的服務器是否已經啓動。批處理文件可能會啓動一個將命令窗口打開的進程。當我嘗試使用僅包含暫停命令的批處理時,它在這裏完美工作。 – GHad 2010-09-10 15:13:00

+0

不,服務器未啓動... – Anto 2010-09-10 15:17:21

2

這是更好的使用數組的參數,就像你一樣。

+0

可以舉一個使用它的例子在上述情況下? – 2011-06-21 12:06:34

+0

我當然想到了同樣的事情,並嘗試過,但它不起作用!它只打開一個命令窗口,當前文件夾作爲項目根目錄(與上面tony的註釋中提到的一樣) – 2011-06-21 15:49:25

+0

我得到了原因,查看我的回答如下 – 2011-06-21 16:19:59

0

這工作:

List<String> templst = new ArrayList<String>();

templst.add("cmd");

templst.add("/C");

templst.add("start");

templst.add("backup.bat");

Process p = rt.exec(templst.toArray(new String[]{}), null, new File(path));

+0

不要嘗試使用/ b標誌,它不起作用在這種情況下。相反,只需將exit作爲批處理文件中的最後一條命令即可。 – 2011-06-21 16:19:27

2
Runtime.getRuntime().exec("cmd /C start \"\" \"C:/Documents and Settings/Zatko/My Documents/Project-Workspace/IUG/external/apps/archive/run-server.bat\""); 

應該工作。

您需要在其中引用具有空格或shell元字符的參數。並且start期望第一個被引用的參數是一個窗口標題,所以給它一個空的標題,這樣很開心。