Batchdatei ausführen und Ergebnisse abfragen

Status
Nicht offen für weitere Antworten.

cyliax

Mitglied
So bevor ihr mich erschlagt, von wegen Suche benutzen usw. Hab ich gemacht und im Prinzip weiß ich auch wie es laufen müßte, nur irgendwas habe ich noch nicht hinreichend berücksichtigt. Also ich will aus meinem Programm heraus ne Batch-Datei starten, die intern widerum ne Batch-Datei startet über ein Call-Befehl (daran kann ich leider nichts ändern). Wie dem auch sei, ich bekomme es nicht hin, meine Anwendung für die Zeit der Batch-Ausführung (dauert ca. 20 Sek.) schlafen zu legen, damit sie auf das Ergebnis wartet. Des weiteren möchte ich gerne auswerten ob das ganze erfolgreich war oder nicht (anhand der Ausgaben).

Also diesen Code hab ich gerade, aber bis auf die erfolgreiche Ausführung klappt nichts anderes. Kein Block der Hauptanwendung und keine Rückgabewerte im String (line), obwohl bei normalem Aufruf der Batch was zu sehen ist. Ich danke euch schon jetzt für eure Hilfe.

Code:
String cmd = "cmd /c start test.bat datei.xml";

try {
	Process p = Runtime.getRuntime().exec(cmd);
	System.out.println("waiting for termination");
	try {
		p.waitFor();
	} catch (InterruptedException e) {}

	BufferedReader procout = new BufferedReader(
		new InputStreamReader(p.getInputStream())
	);
	String line;
	while ((line = procout.readLine()) != null) {
		System.out.println("  OUT> " + line);
	}
} catch( IOException e) {
	System.out.println("Fehler");
}
 

thE_29

Top Contributor
cmd /c startet neuen Prozess und das Output ist somit nicht mehr greifbar für getInputstream!

Also du könntest das hier sagen:

Code:
String cmd = "cmd /c start test.bat datei.xml > C:\ausgabe.txt"
Danach ausgabe.txt auslesen!
Wobei ich sogar glaube, dass start kannst du dir sparen! cmd /c test.bat datei.xml > C:\asugabe.txt sollte reichen!

Am besten eine Datei mit java.io.File.createTempFile("blubor",".bat"); generieren lassen und das dann löschen...
 

cyliax

Mitglied
hmm, ok, dann lassen wir das mal mit der ausgabe... aber es muss doch irgendwie festzustellen sein, ob die batch-datei fertig abgearbeitet ist oder nicht?

das "start" öffnet übrigens das konsolenfenster des betriebssystem, so dass man sehen kann, was er macht, ohne "start" arbeitet er die batch unsichtbar ab.
 

thE_29

Top Contributor
Du könntest einfach die Batch starten ;)
Dann sollte er dann fertig sein, wenn die Batch durch ist!
 

cyliax

Mitglied
ja ich starte auch die batch, aber mein java-programm läuft munter weiter und wartet nicht auf die vorgänge die da in der batch so passieren. das ganze dauert so 20 sekunden, dann schließt sich das schwarze fenster (bei benutzung von "start") wieder und genau das soll mein java-programm mitbekommen um dann mit ner anderen geschichte weiter zu machen.

Irgendwelche Ideen dazu?
 

cyliax

Mitglied
So, ihr seht ich lasse nicht locker... weil ich einfach denke es sich nicht um ein unlösbares Problem handelt.

Diesmal erst der Code der TestAnwendung.

Code:
import java.io.IOException;

public class ThreadTest {

	final Object syncObject = new Object();
	
	public ThreadTest() {
		init();
	}
	
	public void init() {
		Batch1 batch1 = new Batch1();
		batch1.start();

		Batch2 batch2 = new Batch2();
		batch2.start();
	}
	
	class Batch1 extends Thread {
	    	public void run() {
	    		ProcessBuilder pb = new ProcessBuilder( "cmd", "/c", "start", "test1.bat" );
	    		pb.redirectErrorStream( true );
			Process p = null;

			try{
       				synchronized (syncObject) {syncObject.wait();}
		        } catch (InterruptedException e) {}

                	try {
				p = pb.start();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	    	}
	}
	
	class Batch2 extends Thread {
    		public void run() {
    			ProcessBuilder pb = new ProcessBuilder( "cmd", "/c", "start", "test2.bat" );
    			pb.redirectErrorStream( true );
			Process p = null;
			
    			try {
				p = pb.start();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			synchronized (syncObject) {syncObject.notify();}
	    	}
	}

}

Was mir im Prinzip immer noch fehlt ist die Abfrage ob Batch 2 fertig abgelaufen ist um dann Batch 1 zu starten. Bis jetzt wird also das syncObject.notify in jedem Fall ausgeführt und so habe ich sofort zwei Konsolenfenster offen. Ich bitte immer noch um Hilfe. Danke.

PS: Man könnte ja auch meinen, dass p.waitFor() irgendwie weiterhilft, aber die Funktion liefert immer 0, egal ob Prozess p noch läuft oder nicht.
 
Zuletzt bearbeitet:

Ebenius

Top Contributor
Jetzt hast Du das waitFor vergessen.

Man sollte die Ströme des Prozesses auf jeden Fall auslesen, sonst hängt Dir das Batch-File, wenn es zu viele Ausgaben macht.

Hier ist ein ausführbares Beispiel das [was auch immer] per "cmd /C" startet, die Ströme des Prozesses auf stdout und stdin piped und wartet, bis der Prozess beendet ist. Damit kannst Du sicher etwas anfangen: [HIGHLIGHT="Java"]public class BatchFileStarter {

static class OutputPipe implements Runnable {

private final Reader in;
private final PrintStream out;

/** Creates a new {@code OutputPipe}. */
OutputPipe(Reader in, PrintStream out) {
this.in = in;
this.out = out;
}

public void run() {
try {
int c;
while ((c = in.read()) != -1) {
out.print((char) c);
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}

public static void main(String[] args)
throws IOException, InterruptedException {
if (args.length < 1) {
System.err.println("Syntax: BatchFileStarter command [command [...]]");
System.exit(1);
}

// command chain
final String[] command = new String[2 + args.length];
command[0] = "cmd";
command[1] = "/C";
System.arraycopy(args, 0, command, 2, args.length);

// process creation
final ProcessBuilder procBuilder = new ProcessBuilder(command);
final Process process = procBuilder.start();
createOutputPipe(process.getInputStream(), System.out);
createOutputPipe(process.getErrorStream(), System.err);

// wait for process to terminate and exit with process' return code
System.exit(process.waitFor());
}

private static void createOutputPipe(InputStream in, PrintStream out) {
new Thread(new OutputPipe(new InputStreamReader(in), out)).start();
}
}[/HIGHLIGHT]
Ebenius
 
Zuletzt bearbeitet:

cyliax

Mitglied
ok, ich habe auch noch was entdeckt, womit mein problem zu tun haben könnte. es liegt glaube ich an diesem komischen "start", welches das fenster sichtbar macht. schalte ich das ab, bekomme ich auch die ausgaben der batch-datei in die eclipse-konsole und kann auch überprüfen ob das skript abgearbeitet ist... ich fummel mal weiter, glaube ich bin auf dem richtigen weg, melde mich dann nochmal.
 

Ebenius

Top Contributor
ok, ich habe auch noch was entdeckt, womit mein problem zu tun haben könnte. es liegt glaube ich an diesem komischen "start", welches das fenster sichtbar macht. schalte ich das ab, bekomme ich auch die ausgaben der batch-datei in die eclipse-konsole und kann auch überprüfen ob das skript abgearbeitet ist... ich fummel mal weiter, glaube ich bin auf dem richtigen weg, melde mich dann nochmal.
Es liegt definitiv am start, das wollte ich eigentlich noch erwähnen und hab's vergessen. Aber trotzdem wichtig: Die Ströme auslesen. Der Fehler wird leider ständig begangen.

Ebenius
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R JAR aus Batchdatei Aufruf Allgemeine Java-Themen 4
S Batchdatei mit pause hängt Allgemeine Java-Themen 8
G Batchdatei zum Programmstarten Allgemeine Java-Themen 8
T .Jar kann man nicht ausführen Allgemeine Java-Themen 18
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
S Buttons nacheinander ausführen Allgemeine Java-Themen 2
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
D VBA Code mit Java ausführen möglich? Allgemeine Java-Themen 10
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
P Bat Datei in Java ausführen Allgemeine Java-Themen 2
J Jar-Datei ausführen Allgemeine Java-Themen 7
T Projekt baut nicht mehr/lässt sich nicht mehr ausführen Allgemeine Java-Themen 6
F jar File ausführen Allgemeine Java-Themen 14
Hatsi09 Jar datei ausführen verursacht NumberFormatException Allgemeine Java-Themen 9
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
J Linux .jar beim Start automatisch ausführen Allgemeine Java-Themen 6
J CMD Befehl in Java Consolenprogramm ausführen Allgemeine Java-Themen 6
L Python in Java ausführen Allgemeine Java-Themen 4
L Eclipse Java Code ausführen Allgemeine Java-Themen 18
F Java Code ausführen direkt nach Anmelden in Windows Allgemeine Java-Themen 2
I File ausführen und mein Programm bearbeiten lassen Allgemeine Java-Themen 11
B Input/Output Probleme beim Ausführen von Shell-Befehlen mit Java Allgemeine Java-Themen 28
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
N Script mit Java ausführen Allgemeine Java-Themen 21
F Java automatisch ausführen Allgemeine Java-Themen 3
J Alle Unit Tests in Maven Modul Projekt ausführen Allgemeine Java-Themen 7
D Verknüpfung mit Java Ausführen Allgemeine Java-Themen 1
H jar-Datei mit java.exe anstatt mit javaw.exe ausführen Allgemeine Java-Themen 9
S Eclipse Probleme beim Implementieren / Ausführen von jUnit 5-Test Suites Allgemeine Java-Themen 14
M Classpath Java App ausführen Allgemeine Java-Themen 2
Javafan01 .sh datei in Java ausführen Allgemeine Java-Themen 1
Javafan01 Ausführen Allgemeine Java-Themen 1
das_leon Hotkey ausführen Allgemeine Java-Themen 1
A Input/Output VBS-Datein mit Java Ausführen Allgemeine Java-Themen 2
K Server mieten, Berechnungen darauf ausführen Allgemeine Java-Themen 14
L HTML Formular ausführen Allgemeine Java-Themen 1
Tommy Nightmare Ausführen von CMD Befehlen Allgemeine Java-Themen 10
H .Sh Datei ausführen programmieren Allgemeine Java-Themen 5
C Classpath Neue Klasse über einen Button ausführen Allgemeine Java-Themen 3
M *.class Files ausführen Allgemeine Java-Themen 2
C Ausführen einer .JAR Datei Allgemeine Java-Themen 5
J Batch datei öffnen und als Admin ausführen Allgemeine Java-Themen 43
J Ältere applets ausführen? Allgemeine Java-Themen 0
A Linux bash script ausführen Allgemeine Java-Themen 16
Viktim Bash Script in Java ausführen Allgemeine Java-Themen 6
J While Schleife ausführen bis Zahl = X Allgemeine Java-Themen 19
T Programme ausführen.. Allgemeine Java-Themen 3
H Java Anwendungen ausführen Allgemeine Java-Themen 3
T Während des Programmlaufs andere Programme ausführen Allgemeine Java-Themen 1
T .jar über cmd ausführen (später dann batch) Allgemeine Java-Themen 6
M Klasse in separaten Thread ausführen.Wie genau? Allgemeine Java-Themen 2
G Threads Methode nebenbei ausführen, Status verarbeiten Allgemeine Java-Themen 4
Fischkralle Ausführen von fremden Code Allgemeine Java-Themen 14
E JCuda-0.6.5 Probleme beim ausführen der Datei Allgemeine Java-Themen 0
2 jede Stunde Methode ausführen Allgemeine Java-Themen 8
buggy84 Ausführen einer Batch mit Parameterübergabe funktioniert nicht richtig Allgemeine Java-Themen 18
T Git-Befehle mit Java ausführen Allgemeine Java-Themen 5
Neumi5694 Datei mit erhöhten Rechten ausführen Allgemeine Java-Themen 2
Bananabert Java mit bestimmter GPU ausführen Allgemeine Java-Themen 7
F Mencoder unter Java Ausführen Allgemeine Java-Themen 0
L Jar-Datei in Web ausführen Allgemeine Java-Themen 1
U CMD Befehle als Admin ausführen Allgemeine Java-Themen 6
A Thread: Code paralell ausführen in mehreren Instanzen Allgemeine Java-Themen 1
D swingset3.jnlp lässt sich nicht ausführen Allgemeine Java-Themen 2
S Shell Commands mit absolutem Pfad ausführen Allgemeine Java-Themen 2
G Umgebungsvariable Jar im Netzlaufverk ausführen Allgemeine Java-Themen 4
K Eclipse Fehler beim Ausführen meines Programms in Eclipse Allgemeine Java-Themen 11
F paintComponent() nicht automatisch ausführen? Allgemeine Java-Themen 5
G while Schleife ausführen solange eine Taste gedrückt ist Allgemeine Java-Themen 14
M Java Anwendung ausführen Allgemeine Java-Themen 5
J Code ausführen bei JVM-Zerstörung Allgemeine Java-Themen 15
T Java Klassen aus externer .jar laden und ausführen Allgemeine Java-Themen 3
Hoppelmann Befehlszeile an bestimmtem Ort ausführen Allgemeine Java-Themen 2
M Befehl in Runtime ausführen der Eingabe benötigt Allgemeine Java-Themen 3
C Rechnung genau 8 mal ausführen Allgemeine Java-Themen 5
aze Jar ausführen über Runtime.execute funktioniert nicht Allgemeine Java-Themen 4
S NoSuchMethodError beim Ausführen einer C Methode über JNI Allgemeine Java-Themen 5
C Umgebungsvariable Java-Datei in anderem Verzeichnis ausführen Allgemeine Java-Themen 2
F Jar auf Netzlaufwerk ausführen Allgemeine Java-Themen 2
Gossi Java Code in einer GUI eingeben und ausführen? Allgemeine Java-Themen 2
D Code später ausführen Allgemeine Java-Themen 8
Wirago (runnable) JAR-File ausführen Allgemeine Java-Themen 6
S Fehler beim ausführen des HTML Allgemeine Java-Themen 7
T jar Archiv auf Server ausführen Allgemeine Java-Themen 3
J CMD direkt in Java ausführen Allgemeine Java-Themen 11
B UNIX Shell befehl über JavaCode ausführen Allgemeine Java-Themen 19
J Threads Methode in Mainthread ausführen Allgemeine Java-Themen 5
A Jasperreports automatisch ausführen lassen Allgemeine Java-Themen 5
P jar-Datei lässt sich nicht ausführen Allgemeine Java-Themen 5
T Junit-Tests in Java Klasse ausführen Allgemeine Java-Themen 26
R Jar Datei ausführen Allgemeine Java-Themen 7
J Java programm lässt sich in win7 nach linux install nicht mehr ausführen Allgemeine Java-Themen 18
L Java Quellcode auf Windows 7 ausführen? Allgemeine Java-Themen 3
J Java Datei ausführen Allgemeine Java-Themen 8
DStrohma Kommandozeilen-Programm unendlich lang ausführen Allgemeine Java-Themen 13
truesoul Runtime.getRuntime().exec nebenbei ausführen Allgemeine Java-Themen 12
R Methoden in einem Thread unterschiedlich oft ausführen Allgemeine Java-Themen 4
E Externes bat sichtbar ausführen Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben