2009-07-30 10 views
2

Ich versuche, zwei bat-Dateien von einer Java-App auszuführen. Ich verwende:Java Problem beim Ausführen einer .bat-Datei

try 
{ 
    Runtime rt = Runtime.getRuntime(); 
    Process proc = rt.exec(fullCommand); 
    InputStream stderr = proc.getErrorStream(); 
    InputStreamReader isr = new InputStreamReader(stderr); 
    BufferedReader br = new BufferedReader(isr); 

    int exitVal = proc.waitFor(); 
    System.out.println("Process exitValue: " + exitVal); 

    System.out.println("Working..."); 
} //End try 

catch (Throwable t) 
{ 
    t.printStackTrace(); 
} //End catch 

} // Ende Methode

Die Bat-Datei ruft eine andere Fledermaus-Datei. Es scheint nie zu beenden und die Kontrolle der ursprünglichen Fledermaus-Datei zurückzugeben.

Von 1.bat

set zzname=%1 
zzlookup.bat %zzname% 

Die andere Bat-Datei läuft ein paar Befehle und sollten dann verlassen. Muss ich etwas Besonderes mit dem Laufzeitteil machen?

Vielen Dank im Voraus, Dustin

Antwort

3

Um eine Batch-Datei von einem anderen anrufen und nach wie vor zum Original zurückkommen, müssen Sie

call zzlookup.bat %zzname% 

Ansonsten sobald zzlookup.bat beendet wird, wird der Prozess halt.

Zum Beispiel:

withcall.bat:

@echo Before 
@call other.bat 
@echo After 

direct.bat:

@echo Before 
@other.bat 
@echo After 

other.bat:

@echo Other 

Ausgabe:

c:\Users\Jon\Test>withcall 
Before 
Other 
After 

c:\Users\Jon\Test>direct 
Before 
Other 
+0

ich nur neugierig bin, warum DOS/Windows denken würden Sie * nicht * auf die ursprüngliche Batchdatei zurückgeben möchten –

+0

Keine Ahnung - meine Vermutung ist, es ist nur ein Fehler von a * lang * Zeit, die jetzt aus Kompatibilitätsgründen nicht behoben werden kann. –

+0

Ich habe den Anruf hinzugefügt und es funktioniert immer noch nicht. Ich kann den Aufruf nur von der Befehlszeile (nicht über Java) und es führt gut aus. Brauche ich einen anderen Stream-Reader für den anderen Prozess oder etwas anderes, obwohl Java es nicht ausführt? – Dustin

1

Wenn die Batch-Datei eine Ausgabe generiert, müssen Sie die Ströme abziehen, die die Standard- und Fehlerausgabe darstellen.

Es gibt bereits funktionierende Beispiele here.

4

Zusätzlich zu den oben genannten Ratschlägen glaube ich nicht, dass Runtime.exec das direkte Ausführen von .bat-Dateien erlaubt. Versuchen Sie, Ihrem Befehl zuerst "cmd \ c" voran zu stellen.

Siehe http://ant.apache.org/manual/Tasks/exec.html

+2

Eigentlich ist es "cmd/c", aber ansonsten guter Fang. – rob

Verwandte Themen