2011-02-23 319 views
3

我回來之前用java程序執行.bat文件的問題。從java執行.bat文件?

當我執行我的java代碼時,我不明白爲什麼它在我的Eclipse的項目目錄中查找我的.bat文件。

我明確聲明如下路徑:"cmd.exe", "/C", "Start", "C:\\File\\batfile.bat" 如果有人能夠清楚地解釋我,請。 非常感謝!

我使用win xp和Eclipse Helios。

這裏是我的代碼:

String cmd; 
     try { 
      String[] command = { "cmd.exe", "/C", "Start", "C:\\File\\batfile.bat" }; 
       Runtime r = Runtime.getRuntime(); 
       Process p = r.exec(command); 
       p.waitFor(); 

       } catch (Exception e) 
       { 

       System.out.println("Execution error");} 
+0

它完美對我來說,使用您所提供的相同的例子。不知道什麼是不工作。 – adarshr 2011-02-23 11:12:30

+1

嘗試從控制檯運行相同的類 – 2011-02-23 11:14:56

+3

請仔細檢查您是否沒有將bat文件命名爲batfile.bat.txt。您可以通過轉到「我的電腦」>「工具」>「文件夾選項」>取消選中「隱藏已知文件類型的擴展名」來完成此操作。 – adarshr 2011-02-23 11:16:00

回答

1

過程的cmd.exe(從PATH環境變量中挑選)與當前工作目錄相同的父進程(的eclipse.exe = JAVA)創建。這很可能是c:\ eclipse或工作區目錄。

如果找不到文件(C:\ File \ batfile.bat),它會嘗試當前工作目錄。如果使用Run As Java運行此代碼,請嘗試更改其中的工作目錄。還要確保BAT文件確實存在。

+0

是的,如果我更改目錄,我的意思是如果將c:\ Eclipse \ workspace \ myproject中的.bat文件複製,那麼它工作正常。但是,如果我編譯我的項目,並創建一個可運行的jar,並在另一臺計算機上啓動此代碼將它的工作?以及爲什麼它在這裏爲其他人工作?謝謝 – user618111 2011-02-23 12:39:30

1

試試這個:

String com = System.getEnv("ComSpec") != null ? System.getEnv("ComSpec") : "C:\\Windows\\System32\\cmd.exe"; 

String[] command = { com, ...... } 

COMSPEC通常設置爲CMD.EXE的路徑。如果不是,請使用完整(預期路徑)。您也可以在%SystemRoot%\ system32中查找它。甚至%路徑%。但只是檢查ComSpec比默認情況下使用cmd.exe更好。

正如其他人指出的,從Eclipse運行時,您的默認工作目錄通常是Eclipse項目文件夾。

一般來說,不要依賴工作文件夾是有用的好習慣。而是指定所需任何路徑,或搜索路徑(如果應用程序不這樣做)。從命令

1

刪除Start - 這是不必要的 - 和嘗試:

String[] command = { "cmd.exe", "/C", "C:\\File\\batfile.bat" }; 
0
Runtime.getRuntime().exec("cmd /c start C:\\File\\batfile.bat");