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ß
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.
Man könnte die Tochter-Batches Dateien erstellen lassen.
1 | start batch1.bat |
2 | loop: |
3 | if not exist ready1.txt goto loop |
4 | del ready1.txt |
5 | echo habe fertig ! |
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...
busy loop schrieb: > der zweite durch > den Virenscanner Das ist dann aber was für Anfänger! Wir haben auf Arbeit McAffee, 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.
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.
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.
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.
Dann ist das Ding aber trotzdem bekloppt programmiert, denn die CPU Last geht auf allen Kernen auf 100% wenn der startet.
Amateur schrieb: > Gibt es nicht mehr den Befehl: pause ...und dann muss der Benutzer entscheiden wann es weiter gehen soll oder wie? in der bash gibt's dafür wait, ich glaube in batch gibt's da nichts passende. Imo entkoppelt start ja auch komplett, oder?
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.
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.
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.
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.
Rolf M. schrieb: > Dann erzähl mal, wie du in einer Batchdatei ein eigenes wait > implementieren willst. will ich überhaupt nicht. Habe doch schon geschrieben, das ich Batch hierfür nicht einsetzen würde.
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!).
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.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.