2014-07-02 92 views
0

我已經經歷了幾個關於如何實現這一點的問題。 我使用process.waitFor()/waithere所述。問題在於,它不僅等待命令執行,而且直到cmd提示符關閉(可以通過在bat文件中添加exit來完成)。但我無法將bat文件修改爲其產品文件。從java執行.bat文件並等待完成

Runtime run = Runtime.getRuntime(); 

    try { 
     String path = "C:/Folder/c.bat"; 
     String executeCmd= "cmd /c start /wait "+path; 
     final Process process =run.exec(executeCmd);   
     process.waitFor(); 
     System.out.println("did I wait?"); 
    } catch (Exception e) {   
     e.printStackTrace(); 
    } 

如何讓它等待直到命令執行。

+0

取出'start/wait'? (它看起來像你已經在等待cmd.exe關閉。) –

+0

@Bill_Stewart如果我刪除'start',它不會被執行,如果我刪除'wait'。它甚至不等待並打印_did等待?_ – 2FaceMan

+0

然後它取決於'C:/ Folder/c.bat'在做什麼。如果它是異步啓動可執行文件,那麼您將無法等待該可執行文件終止,而無需查找其進程ID,然後等待它關閉。 –

回答

0

您可以創建以下內容的助手批處理文件:

start /wait %1\c.bat 
exit 

商店這個助手批任何你想去的。

然後以c.bat的路徑作爲參數啓動此幫助程序批處理文件。

Runtime run = Runtime.getRuntime(); 

    try { 
     String pathToCBatch = "C:\\Folder\\"; 
     String pathToHelperBatch = "c:/helperBatch.bat"; 
     String executeCmd = "cmd /c start /wait " + pathToHelperBatch + " " + pathToCBatch; 
     final Process process = run.exec(executeCmd); 
     System.out.println(System.currentTimeMillis()); 
     process.waitFor(); 
     System.out.println(System.currentTimeMillis()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
+0

它不按預期工作,等待命令提示符關閉。 – 2FaceMan

+0

你到底想要達到什麼目標?該程序是否等待? – s3b

+0

.bat文件用於啓動服務器,我希望代碼等待直到它啓動。你寫的邏輯將等到cmd promt手動關閉,我試了一下 – 2FaceMan

0

我也有同樣的問題:「調用一個批處理文件,並等待,直到它完成」(的Windows PC)。此解決方案適用於我:

StringBuilder command = new StringBuilder("cmd /c start /wait C:\\script.bat"); 
    // my script take 2 file as arguments 
    command.append(" ").append(inputFile); 
    command.append(" ").append(outputFile); 
    try { 
     final Process p = Runtime.getRuntime().exec(command.toString()); 
     p.waitFor(); 
    } catch (InterruptedException e) { 
     System.out.println(e); 
    }