Batchdateinen Ende Abwarten / Ausgabe bewerten

Gast #4837212
Hallo zusammen,

ich starte in einer Batchdatei mehrere andere Batchabläufe gleichzeitg 
(start "" ...).

Jetzt brauche ich noch eine Möglichkeit herrauszufinden, wann alle 
Abläufe fertig sind und möchte diese noch auf Fehler untersuchen. D.h. 
ich müsste die Ausgabe der Batchprozesse untersuchen. Die einzige Idee, 
welche mir einfällt wäre, die Ausgabe in eine Datei umzuleiten und diese 
zu untersuchen.

Hat jemand eine Idee?

Dank und Gruß
Gast #4837215
Sit schrieb:
> Hat jemand eine Idee?

ja, eine andere Sprache verwenden.

vermutlich geht es z.b. mit der PowerShell. Ich würde es auf die 
schnelle mit Perl machen.

einfach die Batch in extra Threads starten und dann das Ergebnis 
auswerten.

Gleichzeit und Batch passt halt nicht wirklich gut zusammen.
Gast #4838585
Jetzt weiß ich auch, warum man heutzutage Quad Core CPUs braucht.
Ein Core wird durch Windows Update ausgelastet, der zweite durch
den Virenscanner und der dritte dann durch solche Batch Files...
#4838633
Peter II schrieb:
> Christian R. schrieb:
>> wenn
>> der Freitags 14 Uhr von der IT losgelassen wird, legt der alle
>> vorhandenen Cores lahm, vor allem wenn man einen Rechner mit HDD hat.
>
> Wenn es nur eine HDD ist, dann sind die cores weniger belastet als bei
> einer SSD.

Nee, bei uns eben nicht, das ist das zweite wunderliche dran. Bei den 
SSD Rechnern kann man nebenbei noch arbeiten, bei den HDD Rechnern kann 
man sofort nach Hause gehen.
Ich denk dann immer an John McAffee und seine Vollmeise, da muss man 
sich auch über die Software nicht mehr wundern.
Gast #4838635
Christian R. schrieb:
> Nee, bei uns eben nicht, das ist das zweite wunderliche dran. Bei den
> SSD Rechnern kann man nebenbei noch arbeiten, bei den HDD Rechnern kann
> man sofort nach Hause gehen.

das ist logisch - hängt aber nicht mit der CPU zusammen. die CPU ist 
nicht ausgelastet - aber es gibt keine IO-Reserven.
Gast #4838799
Dirk D. schrieb:
> in der bash gibt's dafür wait, ich glaube in batch gibt's da nichts
> passende.

es gibt viele unix Tools auch für Windows. Im netzt findet sich auch 
eine sleep.exe, damit kann man ohne CPU-zeit warten.

Aber meist es schneller, es gleich in einer "richtigen" Sprache zu 
machen.
#4838804
Peter II schrieb:
> Dirk D. schrieb:
>> in der bash gibt's dafür wait, ich glaube in batch gibt's da nichts
>> passende.
>
> es gibt viele unix Tools auch für Windows. Im netzt findet sich auch
> eine sleep.exe, damit kann man ohne CPU-zeit warten.
>
> Aber meist es schneller, es gleich in einer "richtigen" Sprache zu
> machen.

wait und sleep sind völlig unterschiedliche dinge.
sleep wartet eine vorgegebene zeit.
wait wartet bis Hintergrund-Prozesse beendet sind.

Wait gibt es bestimmt auch für windows, es wird aber wahrscheinlich nur 
in einer passenden umgebung, z.B. cygwin, laufen.

Ich bin ja der Meinung das es oft schneller geht wenn man die 
vorhandenen Tools nutzt statt ständig das Rad neu zu erfinden.
Gast #4838809
Dirk D. schrieb:
> Ich bin ja der Meinung das es oft schneller geht wenn man die
> vorhandenen Tools nutzt statt ständig das Rad neu zu erfinden.

aber oft passt ein 26" Rad nicht in einen 26" Rahmen.
wenn es alles schon fertig geben würde, könnte man alle 
Programmiersprachen abschaffen.
#4839778
Peter II schrieb:
> Dirk D. schrieb:
>> Ich bin ja der Meinung das es oft schneller geht wenn man die
>> vorhandenen Tools nutzt statt ständig das Rad neu zu erfinden.
>
> aber oft passt ein 26" Rad nicht in einen 26" Rahmen.
> wenn es alles schon fertig geben würde, könnte man alle
> Programmiersprachen abschaffen.

Dann erzähl mal, wie du in einer Batchdatei ein eigenes wait 
implementieren willst.
Oder, um wieder die Analogie mit dem Rad zu bemühen: Wenn du gar keinen 
Rahmen hast, bringt dir das Rad auch nix.
#4839997
Ich würde nen Python-Interpreter (oder wahlweise irgend ne andere 
komfortable Scriptsprache der eigenen Vorliebe entsprechend) 
installieren.

Das mache ich persönlich auf allen Rechnern auf denen mal so eine 
Notwendigkeit erwächst ohne auch nur eine Sekunde lang zu zögern, denn 
das frisst kein Brot und man kann damit bei Bedarf alles mögliche 
scripten. Das ist ungefähr so wie bei Muttern im Haus irgendwo ne kleine 
Werkzeugkiste zu deponieren, wenn man irgendwann später "mal schnell" ne 
Zange braucht oder nen Kreuzschlitz hat man sofort das Nötigste zur Hand 
ohne umständlich mit ungeeigneten Tools (Küchenmesser, cmd.exe, 
Tesafilm, Geflügelschere, etc.) improvisieren zu müssen 
(Verletzungsgefahr!).
#4841657
Also wenn es nur um das Feststellen des Endes der Batches geht, dann 
kann man mit tasklist feststellen, ob die Batchfenster alle noch da 
sind, bzw. wann alle beendet sind.
Beispiel:

rem Starten eines neuen Fensters, welches den pause-Befehl ausführt,
rem und den Titel "mein-CMD - pause" trägt
start "mein-CMD" pause

rem dann mit tasklist (in einer Schleife) abfragen
tasklist /FI "windowtitle eq mein-CMD - pause"|find "cmd.exe"

Das Find ist am Ende nötig, da tasklist selbst keinen auswertbaren 
Errorlevel zurückliefert (immer 0), während find eine 1 liefert, wenn 
nichts gefunden (sonst 0).
Das funktioniert dann auch mit einem ganzen Bündel an gleichzeitig 
gestarteten Batches bzw. Kommandos.

Und was die Untersuchung auf Fehler angeht: die meisten Kommandos geben 
einen RC zurück, welcher ja via %errorlevel% abfragbar ist. damit kann 
man ja den Fehlerstatus jedes einzelnen Kommandos im Batch abfragen, und 
entsprechend darauf reagieren. Z.B. eine Ausgabe in ein Logfile machen, 
z.B 0 im Erfolgsfalle, 1 im Fehlerfalle, oder bestimmte Strings, welche 
man dann zusätzlich noch im Haupt-Batch auswerten lassen könnte.
Wenn man aber Details über einen Fehler haben will, ist es natürlich 
immer günstig, den Output in ein File umzuleiten, damit man auch eine 
Fehleranalyse machen kann.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.