2014-10-28 69 views
2

我一直試圖用線在Java中運行可執行文件.bat運行在JAVA .bat文件,而無需打開命令提示符,

Runtime.getRuntime().exec("call " + batFile); 

但它返回一個錯誤

無法與命令行nullCreateProcess啓動過程:調用batfilename這裏錯誤= 2 IOException異常:創建流程:來電來訪batfilename錯誤= 2

我設法繞過這個,用exec()函數中的String替換"cmd /c start " + batFile,但是這會打開一個不允許的命令提示符。

有沒有解決方法呢?謝謝!

+3

您是否試過'Runtime.getRuntime().exec(batFile);'? – MadProgrammer 2014-10-28 00:36:22

+0

@JasonC適合我...... – MadProgrammer 2014-10-28 00:44:03

+1

@JasonC根據你在做什麼,這可能會很棘手......你是否在等待這個過程完成? – MadProgrammer 2014-10-28 00:53:04

回答

4

嘗試直接運行批處理文件,例如...

ProcessBuilder pb = new ProcessBuilder("C:/Test.bat"); 
pb.redirectError(); 
try { 
    Process p = pb.start(); 
    try (InputStream inputStream = p.getInputStream()) { 
     int in = -1; 
     while ((in = inputStream.read()) != -1) { 
      System.out.print((char)in); 
     } 
    } 
    System.out.println("Exited with " + p.waitFor()); 
} catch (IOException | InterruptedException ex) { 
    ex.printStackTrace(); 
} 

這是批處理文件...

@echo Hello World 

(我知道,大規模的)和代碼輸出..

Hello World 
Exited with 0 
+0

嗨!完美的作品!謝謝一堆!所以如果我需要給.BAT文件添加參數,我怎麼做到的?謝謝! – 2014-10-28 01:27:54

+0

很高興幫助.... – MadProgrammer 2014-10-28 01:29:12

+0

嗨!後續,如果我需要添加參數到.BAT文件,我怎麼做到的?謝謝! – 2014-10-28 01:30:41

0

有點晚了,但對於其他想嘗試的人,我找到了/ B的啓動命令。

String[] command = { "cmd", "/C", "start", "/B", "test.bat" }; 
File path = new File("C:/Users/Me/Desktop/dir/"); 
Runtime.getRuntime().exec(command, null, path); 
相關問題