Forum: PC-Programmierung Batchdateinen Ende Abwarten / Ausgabe bewerten


von Sit (Gast)


Lesenswert?

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ß

von Peter II (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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 !

von busy loop (Gast)


Lesenswert?

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...

von Christian R. (supachris)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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.

von Christian R. (supachris)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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.

von Christian R. (supachris)


Lesenswert?

Dann ist das Ding aber trotzdem bekloppt programmiert, denn die CPU Last 
geht auf allen Kernen auf 100% wenn der startet.

von Amateur (Gast)


Lesenswert?

Gibt es nicht mehr den Befehl: pause

von Dirk D. (dicky_d)


Lesenswert?

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?

von Peter II (Gast)


Lesenswert?

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.

von Dirk D. (dicky_d)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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.

von Rolf M. (rmagnus)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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.

von Bernd K. (prof7bit)


Lesenswert?

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!).

von Jens G. (jensig)


Lesenswert?

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
Noch kein Account? Hier anmelden.