Batch starten über Java !Fehler!

theone101

Mitglied
Hallo erst mal,
ich hoffe einer kann mir weiter helfen und zwar:
Ich möchte gerne eine batch ausführen lassen, bis diese beendet wurde. Dann soll mein programm strarten. Dies ist wichtig weil die batch mir ein File erstellt die ich dan später einlesen werde.
Nun mein problem ist das bei mir irgend wie gar nichts get. Er öffnet mir die Batch erstellt mir die File und schreibt aber nix rein.
Hier ein beispiel der Batch:
Code:
@echo off
dir /b /s *.ts > C:\ZTest.txt
pause

Und Hier der Code zum Starten der Batch:
Code:
     Runtime rtm;
		Process proc;
	
try{
		rtm = Runtime.getRuntime();

		proc = rtm.exec("C:\\Test.bat");

		proc.waitFor();

}
catch (Exception e){
	JOptionPane.showMessageDialog(null, "Fehler", "Fehler",0);
}
Ich habe es sogar die batch in eine exe konvertiert aber nichts scheint zu funktionieren.
Er startet mir irgend wie die Batch nur ganz kurz den das File ZTest.txt wird zwar generiert
aber es steht nichts drinnen und mein programm macht einfach weiter.

Ich hoffe jemand kan mir helfen.

Gruß
Thomas
 
Hmm warum machst du dir denn ein batch-File um diese Informationen zu bekommen. Das kannst du doch auch direkt mit Java machen.

File.listFiles etc.
 
Oh tut mir leid das habe ich vergessen zu sagen.
Des ist nicht die richtige Batch file ist nur zur Veranschaulichung einfacher.
Bei der richtigen handelt es sich um ein Programmaufruf das leider nur über eine cmd eingegeben werden kann, das habe ich alles schon in einer Batch geschrieben. Das Programm selber gibt mir dann eine Textdatei zurück. Also geht nur über nen Batch aufruf aber ich komme einfach nicht dahinter warum er abbricht und die batch nicht bis zuende ausführt.

Gruß
Thomas
 
Welches Java benutzt du denn?

Ab 1.5 gibt es den ProcessBuilder, damit kann man ein paar mehr Sachen einstellen. z.B. RedirectErrorStream um zu schauen ob die Batch-Datei vllt Fehler wirft.

Läuft denn deine Batch-Datei auch im richtigen Ordner?
 
Ich benutze Java 1.6 und die Batch funktioniert einwandfrei wenn ich sie so ausführe, nur über den aufruf mit java nicht.

Wenn es alternativen dazu gibt währe ich sehr dankbar für anregungen. Da mir nur die exec funktion bekannt ist.

Oder kann ich die komandozeilen in der Batch auch in java so in eine cmd übergeben würde das auch gehen? Wenn ja wie?

Gruß

Thomas
 
Oder kann ich die komandozeilen in der Batch auch in java so in eine cmd übergeben würde das auch gehen? Wenn ja wie?

hm eine etwas wirre Ausdrucksweise, aber ich glaube du meinst ob man die kommandos in der batchdatei auch direkt über java ausführen kann. sieht so aus als könnte man das mit dem processbuilder regeln... probiers mal aus :)
 
Hallo, Danke erstmal an euch alle, habs jetzt soweit hinbekommen, aber in meiner Batch steht:

Code:
@echo off
dir /b /s *.ts > C:\Test.txt
pause

Mein Programm wartet irgend wie net bis die Batch beendet wurde. Es macht einfach weiter hier der code:

Code:
try{	
		ProcessBuilder processBuilder = new ProcessBuilder("C:/ZTest.bat");
		
		
		Process process = processBuilder.start();
		
		       process.waitFor();
		       
	}catch (Exception e){
		JOptionPane.showMessageDialog(null, "Fehler", "Fehler",0);
	}

Hoffe jemand kann mir da noch nen Tipp geben.

Gruß
Thomas
 
Zuletzt bearbeitet:
Hi,
also zunächst mal das "pause" in der batch ist ja nicht nötig, da sie ja aus dem java-programm heraus gestartet wird und das damit verbundene warten ja völlig unnötig ist...
der fehler liegt glaube ich darin, dass er das kommando im aktuellen verzeichnis ausführt und das führt dann zu problemen (warum auch immer ;))
das problem lässt sich folgendermaßen lösen:
erst die gewünschte festplatte wählen z.B. c
dann noch verzeichnis auf die wurzel setzen (zur sicherheit oder falls man sich schon auf c befindet
Code:
c:
cd\

@echo off
dir /b /s *.ts > C:\Test.txt

ich hoffe das hilft dir, bei mir hats so auf jeden fall funktioniert :).
grüße,
Clash
 
Zuletzt bearbeitet:
Auf jeden Fall solltest du schaun ob irgendwelche Fehler bei der Ausführung auftreten und den Rückgabewert von waitFor verarbeiten:

Java:
public static void main(String[] args) throws Exception {
	final File f = new File("batch.sh");
	final ProcessBuilder b = new ProcessBuilder(f.getAbsolutePath());
	b.directory(f.getParentFile());// Ausführungsverzeichnis setzen
	b.redirectErrorStream(true);

	final Process process = b.start();

	// Ausgabe des Prozesses lesen
	final BufferedReader r = new BufferedReader(new InputStreamReader(
			process.getInputStream()));
	String line = null;
	while ((line = r.readLine()) != null) {
		System.out.println(line);
	}
	
	int term = process.waitFor();
	System.out.println("Process terminated successfully: " + (term==0));
}
 

Neue Beiträge

Zurück