2014-06-30 80 views
0

在我的eclipse項目中,我試圖運行系統命令,我已經將它們收集在一個bash中並將它放在我的項目文件夾中。在java程序中運行批處理腳本

Java代碼的部分是:

public static int exportDBMainData(String DBName, String UserName, 
      String Password, String FilePath) { 

     // First 
     String executeCmd = GraphEditor.class 
       .getResource("/src/sau/se/editor/recover/semapExport.bat") 
       + UserName + " " + Password + " " + DBName + " " + FilePath; 
     Process runtimeProcess = null; 
     try { 
      runtimeProcess = Runtime.getRuntime().exec(executeCmd); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
     int processComplete1 = -1; 
     try { 
      processComplete1 = runtimeProcess.waitFor(); 
     } catch (InterruptedException e1) { 
      e1.printStackTrace(); 
     } 

     return processComplete1; 
    } 

當我運行該應用程序我得到這個錯誤:

java.io.IOException: Cannot run program "nullroot": CreateProcess error=2, The system cannot find the file specified 
    at java.lang.ProcessBuilder.start(Unknown Source) 
    at java.lang.Runtime.exec(Unknown Source) 
    at java.lang.Runtime.exec(Unknown Source) 
    at java.lang.Runtime.exec(Unknown Source) 

我在做什麼錯?

UPDATE 我部分解決了這一問題,現在我得到:

java.io.IOException: Cannot run program "file:/F:/SEMAP_PROJECT/PHASE_1/ECLIPSE_KEPLER/Workspace/SeMap_Recover1.0/bin/sau/se/editor/recover/semapExport.bat": CreateProcess error=2, The system cannot find the file specified 
+1

你說這是一個bash腳本,但它有一個.bat擴展名... – SeriousBusiness

+2

我想保證你的getResource()調用有問題。嘗試打印'executeCmd'以確保它是正確的。 – azurefrog

回答

0

用的Runtime.exec你不使用一個String [參數執行shell命令行,但一個真正的可執行文件,可選]一個字符串的cmdArray instad。 所以你不能執行由線蝙蝠行,但你可以直接運行EXEC執行:

當然
Runtime.getRuntime().exec(new String[]{ 
    "c:\\program files\\...\\semapExport.bat" 
    ,UserName, Password,DBName,FilePath 
}); 

bat文件必須是一個真正的文件,而不是在一個罐子裏的資源。

+0

我沒有工作,另外,我將它在一個罐子裏,它有變量,你看到 –

+0

我應該工作,就像我說的,bat文件必須在文件系統中,嘗試把它放在ac:\ tmp目錄進行測試,我會更新我的答案的參數。 – pdem

0

,我應該通過程序調用腳本正確答案,它不能調用自身,所以我固定它這樣的,它一直:

String executeCmd = "cmd /c start " 
       + DBUtils.class 
         .getResource("/sau/se/editor/recover/semapExport.bat") 
       + " " + UserName + " " + Password + " " + DBName + " " 
       + FilePath; 
+0

它在你的工作區執行bat,因爲你在eclipse中有一個「classes」目錄。用罐子包裝時不起作用。 – pdem

相關問題