Veröffentlicht 20. August 200916 j Hallo Leute, erstmal mein Programm: Process p = pb.start(); OutputStream os = p.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(os); BufferedWriter bw = new BufferedWriter(osw); try { bw.write("CMD-Datei.cmd"); } catch (Exception e) { System.out.println("Fehler!"); } bw.newLine(); bw.write("echo --- get Env ---"); bw.newLine(); bw.write("set"); bw.newLine(); bw.write("ENDE"); bw.newLine(); bw.write("exit"); bw.flush(); InputStream is = p.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader ibr = new BufferedReader(isr); String line; boolean boolLineEnv = false; while ((line = ibr.readLine()) != null) { if(line.contains("set !")) { continue; // [STELLE X] } else if(line.contains("ENDE")) { break; } else { if(line.contains("get Env")) { boolLineEnv = true; } if(boolLineEnv) { alEnvSet.add(line); } //System.out.println(line); } } Soweit so gut. Das funktioniert alles einwandfrei. Nun wird in der "CMD-Datei.cmd" leider eine andere CMD-Datei aufgerufen. Das an sich ist kein Problem, kommen wir aber mal dazu was die zweite Batch-Datei macht: Die Batch Datei ließt eine sogenannte EnvSet-Datei einer bestimmten Firma aus. Wir sind an diese EnvSet-Datei gebunden, sowie an den Kopf der Datei der ca. so aussieht: !---------------------------------------------------------- ! Name der Firma - Umgebungsvariablendatei !---------------------------------------------------------- ! Modus: ... ! Typ: ... ! Zeit: ... !---------------------------------------------------------- Danach folgen dann ein paar Umgebungsvariablen: EnvironmentVariableBeispiel1=C:\Temp EnvironmentVariableBeispiel2=C:\Temp EnvironmentVariableBeispiel3=C:\Temp So, die Batch Datei (No.2) ruft jetzt diese Datei auf und schreibt vor alles was in der Txt-Datei dieser gewissen Firma steht ein Set und schickt es zurück an die Konsole. Wenn ich die Batch-Datei selber unter einer Shell ausführe, passiert nichts, vielleicht wird die ErrorLevel-Variable gesetzt, das kann mir aber egal sein, weil das script weiterläuft. Wenn ich jetzt über Java eine Shell aufmache, und mein Java-Programm quasi alles durchläuft, was die shell auch macht, dann bekomme ich einen silent-Crash ca. an [sTELLE X]. Sobald Stelle X 3 mal durchlaufen wurde, crasht mein Java und es passiert nix mehr. Dann kann ich nur noch Über meine Entwicklungsumgebung (Eclipse) den roten Knopf drücken. Über output sind die letzten 3-4 Outputs: C:\WINDOWS>set !---------------------------------------------------------- C:\WINDOWS>set ! C:\WINDOWS>set !---------------------------------------------------------- C:\WINDOWS>set ! HILFE! Ich weis nicht, wie man mit einem Silent-Crash umgeht, da ich sowas nur aus C++ kenne und C++ bekanntlich öfter vor die Wand fährt bevor so etwas passiert. Hier ist keine Fehlerabfrage mehr möglich, weil das Programm einfach steckenbleibt. ("Stack Overflow"? "Buffer Underrun"?) mfg:( Bearbeitet 20. August 200916 j von Wegginho nur so
21. August 200916 j Hi, Nur mal so als Überlegung... Versuch doch mal das set auch nur vor deine umgebungsvariablen zu setzen und nicht vor kommentare.
21. August 200916 j Der Befehl in der Batch-datei sieht im Moment so aus. Das ist quasi die zum Fehler führende Zeile. Ich habe ehrlich gesagt 0 Ahnung von Batch-Programmierung und werd wohl erstmal ne Weile googlen müssen bevor ich das verstehe. for /f "eol=#" %%l in (%ENV%) do set %%l Falls jemand lehrreiche Informationen zu For-Konstrukten unter Batch hat her damit ;D
24. August 200916 j FOR /F "eol=-" %%A in ('find /v "!" %ENV_VAR%') do set %%A Das ist die Lösung, find /vermeiden ;D
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.