2013-09-30 20 views
5

Próbuję uruchomić plik wsadowy, który znajduje się w innym katalogu z mojego pliku wykonywalnego Java. Mam następujący kod:Uruchom plik wsadowy z kodu Java

try { 
     Process p = Runtime.getRuntime().exec("cmd /c start \"C:\\Program Files\\salesforce.com\\Data Loader\\cliq_process\\upsert\\upsert.bat\"") ;   
    } catch (IOException ex) { 
    } 

Powoduje to, że program otwiera okno cmd w katalogu, w którym program został uruchomiony na i nie dostępu do ścieżki pliku I dostarczone.

+0

Jeśli powiesz "start /?" z okna wiersza polecenia opisze opcje polecenia 'start'; istnieje opcja "/ D ", która może pomóc. – ajb

Odpowiedz

20

Zamiast Runtime.exec(String command), trzeba użyć podpisu exec(String command, String[] envp, File dir) metoda:

Process p = Runtime.getRuntime().exec("cmd /c upsert.bat", null, new File("C:\\Program Files\\salesforce.com\\Data Loader\\cliq_process\\upsert")); 

Ale osobiście użyję ProcessBuilder zamiast, który jest nieco bardziej rozwlekły, ale znacznie łatwiejszy w użyciu i debugowania niż Runtime.exec().

ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "upsert.bat"); 
File dir = new File("C:/Program Files/salesforce.com/Data Loader/cliq_process/upsert"); 
pb.directory(dir); 
Process p = pb.start(); 
+1

Dir jest tą samą ścieżką, którą zawarłem wcześniej? ("\" C: \\ Program Files \\ salesforce.com \\ Data Loader \\ cliq_process \\ upsert \\ upsert.bat \ "") – Ricardo

+0

Jeśli korzystasz z ProcessBuilder, uważam, że nie będziesz potrzebować ofert – MadProgrammer

+0

@Ricardo Dzięki za wyjaśnienie; Nie robiłem żadnych założeń. Zaktualizuję odpowiedź, bo to trochę prostsze. – rob

6

try po

try { 
      String[] command = {"cmd.exe", "/C", "Start", "D:\\test.bat"}; 
      Process p = Runtime.getRuntime().exec(command);   
     } catch (IOException ex) { 
     } 
+4

Jest wcześnie, więc może czegoś brakuje, ale jak to się różni od tego, co robi OP? Muszą wykonać plik wsadowy w określonej lokalizacji – MadProgrammer

2

Kod jest w porządku, ale problem jest w pliku wsadowym.

Musisz pokazać zawartość pliku nietoperza, Twój problem leży w ścieżkach wewnątrz pliku bat.

0
import java.lang.Runtime; 

Process run = Runtime.getRuntime().exec("cmd.exe", "/c", "Start", "path of the bat file"); 

To będzie działać i jest łatwe w użyciu.

1

Poniżej znajduje pracował dla mnie

File dir = new File("E:\\test"); 
     ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "Start","test.bat"); 
     pb.directory(dir); 
     Process p = pb.start();