2013-03-04 66 views
-1

我試圖運行a.bat文件,該文件位於此處:從Java運行.BAT不顯示CMD

C:\ A \ B \ C \ DE \˚F

所以我調用:

cmd /c "cd C:\A\B\C\D E\F && a.bat" 

在CMD上,我可以看到文件的執行情況。

現在我想從Java運行這個文件,然後刪除它,所以我跑:

Runtime.getRuntime().exec("cmd start /wait /c "+ "\"cd C:\\A\\B\\C\\D E\\F && a.bat\""); 

(在/wait因爲我想只有它的執行之後刪除文件)

,但我沒有看到程序的執行(CMD沒有打開)。我怎樣才能解決這個問題?

回答

1

這是一個混亂。當然,你的第一條命令可以在命令提示符下運行,但是你試圖從java中運行一個完全不同的(並且是失靈的)命令。

我假設你要從java內部刪除a.bat,在這種情況下,START/WAIT永遠不會對你有任何好處。子進程將等待START的目標完成,但這對你的java進程沒有影響。

爲什麼不讓子進程刪除文件?我相信以下將起作用。

Runtime.getRuntime().exec("cmd /c \"cd C:\\A\\B\\C\\D E\\F&&a.bat&&del a.bat\""); 

直到批處理腳本完成後,delete命令纔會觸發。如果要始終刪除腳本,即使它失敗,然後將&&更改爲&

1
Runtime run = Runtime.getRuntime(); 
     Process process = null; 
     String cmd = "cmd start /wait /c "+ "\"cd C:\\A\\B\\C\\D E\\F && a.bat\""; 
     try { 
      process = run.exec(cmd); 
      process.waitFor(); 
      System.out.println(process.exitValue()); 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
      process.destroy(); 
     } 
+0

這不是問題。 – Maroun 2013-03-04 17:52:25

+0

實際問題是什麼? – 2013-03-04 17:53:36

+0

當我從'Java'運行命令時,CMD不顯示.. – Maroun 2013-03-04 17:53:57

1

我建議你把命令:

start /wait /c "cd C:\A\B\C\D E\F && a.bat" 
在一個單獨的批處理文件

(比如abc.bat)。
然後運行,使用abc.bat文件以下行:

Process process = Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + "abc.bat"); 
process.waitFor();//throws InterruptedException . So it must be caught. 
if (process.exitValue() == 0) 
{ 
System.out.println("Process is executed successfully!"); 
} 
0

我找到了解決辦法:)

我感動啓動/等待到命令的第二部分,它的工作:

Runtime.getRuntime().exec("cmd "+ "\"cd C:\\A\\B\\C\\D E\\F && start /wait a.bat\"");