Batchdatei mit tasklist findstr funktioniert nicht 100 Prozent
Guten Abend
Ich stelle eine Batchdatei her, die auf 6 PCs an Produktionsmaschinen laufen sollen. Die Maschinenführer sind im Allgemeinen eher schwach, was PCs anbelangt.
Mein Problem: Mein Loop, der prüft ob alle 4 Softwaren beendet wurden, funktioniert nicht 100%. So blieb ich bei vielen Testläufen mehr als einmal im Loop hängen, obschon alle 4 Softwaren geschlossen waren. Meistens im Zusammenhang mit EXCEL.
Also EXCEL wurde beendet, mein Loop läuft aber weiter, und wenn ich im CMD tasklist eingeben, ist EXCEL auf der Liste????!!!! Wie ist das möglich.
Meine Sorgen sind, ich kann nur 100% Software zur Verfügung stellen.
Danke vielmals für Hilfe
Die Batchdatei ruft vier Programme auf, je mit
START "" /Wait "C:\Program files (x86)\........\...exe"
Die Batch soll erst weiterlaufen, wenn alle vier Programme vom User beendet wurden, weil dann eine Datensicherung stattfindet und shutdown. Das hab ich so gelöst (Beispiel hier mit gewöhnlicher OFFICE-Software):
:loop
REM ping, damit eine Pause zwischen den Loops entsteht
ping -n 3 1.1.1.1>nul
cls
tasklist | findstr /i winword.exe
set Winword_laeuft=%errorlevel%
tasklist | findstr /i excel.exe
set Excel_laeuft=%errorlevel%
tasklist | findstr /i notepad.exe
set Notepad_laeuft=%errorlevel%
tasklist | findstr /i PaintStudio.View.exe
set PaintStudio_laeuft=%errorlevel%
set /a Anzahl_nichtlaufender_Prozesse=Winword_laeuft + Excel_laeuft + Notepad_laeuft + PaintStudio_laeuft
REM echo %anzahl_nichtlaufender_Prozesse%
REM pause
if %anzahl_nichtlaufender_Prozesse% == 4 (goto weiter) else goto loop
:weiter
Ich stelle eine Batchdatei her, die auf 6 PCs an Produktionsmaschinen laufen sollen. Die Maschinenführer sind im Allgemeinen eher schwach, was PCs anbelangt.
Mein Problem: Mein Loop, der prüft ob alle 4 Softwaren beendet wurden, funktioniert nicht 100%. So blieb ich bei vielen Testläufen mehr als einmal im Loop hängen, obschon alle 4 Softwaren geschlossen waren. Meistens im Zusammenhang mit EXCEL.
Also EXCEL wurde beendet, mein Loop läuft aber weiter, und wenn ich im CMD tasklist eingeben, ist EXCEL auf der Liste????!!!! Wie ist das möglich.
Meine Sorgen sind, ich kann nur 100% Software zur Verfügung stellen.
Danke vielmals für Hilfe
Die Batchdatei ruft vier Programme auf, je mit
START "" /Wait "C:\Program files (x86)\........\...exe"
Die Batch soll erst weiterlaufen, wenn alle vier Programme vom User beendet wurden, weil dann eine Datensicherung stattfindet und shutdown. Das hab ich so gelöst (Beispiel hier mit gewöhnlicher OFFICE-Software):
:loop
REM ping, damit eine Pause zwischen den Loops entsteht
ping -n 3 1.1.1.1>nul
cls
tasklist | findstr /i winword.exe
set Winword_laeuft=%errorlevel%
tasklist | findstr /i excel.exe
set Excel_laeuft=%errorlevel%
tasklist | findstr /i notepad.exe
set Notepad_laeuft=%errorlevel%
tasklist | findstr /i PaintStudio.View.exe
set PaintStudio_laeuft=%errorlevel%
set /a Anzahl_nichtlaufender_Prozesse=Winword_laeuft + Excel_laeuft + Notepad_laeuft + PaintStudio_laeuft
REM echo %anzahl_nichtlaufender_Prozesse%
REM pause
if %anzahl_nichtlaufender_Prozesse% == 4 (goto weiter) else goto loop
:weiter
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 347338
Url: https://administrator.de/forum/batchdatei-mit-tasklist-findstr-funktioniert-nicht-100-prozent-347338.html
Ausgedruckt am: 04.05.2025 um 09:05 Uhr
7 Kommentare
Neuester Kommentar
Moin,,
bitte setze Dein Codesnippet das nächste mal in die entsprechenden Tags. Dann sieht es gut aus.
Ich würde ab Zeile 7 if-Abfragen einsetzen und eine eigene Variable inkrementieren, denn Du willst ja dass alle 4 Prozesse terminiert sind, bevor etwas passiert.
Du setzt hier den Errorlevel nicht mehr zurück. Der bleibt nach der ersten Änderung stehen.
bitte setze Dein Codesnippet das nächste mal in die entsprechenden Tags. Dann sieht es gut aus.
:loop
REM ping, damit eine Pause zwischen den Loops entsteht
ping -n 3 1.1.1.1>nul
cls
tasklist | findstr /i winword.exe
set Winword_laeuft=%errorlevel%
tasklist | findstr /i excel.exe
set Excel_laeuft=%errorlevel%
tasklist | findstr /i notepad.exe
set Notepad_laeuft=%errorlevel%
tasklist | findstr /i PaintStudio.View.exe
set PaintStudio_laeuft=%errorlevel%
set /a Anzahl_nichtlaufender_Prozesse=Winword_laeuft + Excel_laeuft + Notepad_laeuft + PaintStudio_laeuft
REM echo %anzahl_nichtlaufender_Prozesse%
REM pause
if %anzahl_nichtlaufender_Prozesse% == 4 (goto weiter) else goto loop
:weiter
Ich würde ab Zeile 7 if-Abfragen einsetzen und eine eigene Variable inkrementieren, denn Du willst ja dass alle 4 Prozesse terminiert sind, bevor etwas passiert.
Du setzt hier den Errorlevel nicht mehr zurück. Der bleibt nach der ersten Änderung stehen.
Hallo,
Du weisst, das manche Prozesse eine ganze Weile brauchen um aus der Prozessliste zu verschwinden? Teilweise bleibt noch ein Prozess am laufen, obwohl das Programm eigentlich lange beendet ist. Bei uns ist z.B. Thunderbird solch ein Kandidat.
Als Idee fuer Dich. Wenn Du eh beim Herunterfahren per Script sicherst, lass doch diesen Script pruefen ob Excel oder was immer noch aktiv ist und kill diese Prozesse bevor der Script sichert.
BFF
Eine manuelle Kontrolle im DOS mit Takslist zeigt dort EXCEL.EXE als Prozess an, obschon er vor fast einer Minute geschlossen wurde.
Du weisst, das manche Prozesse eine ganze Weile brauchen um aus der Prozessliste zu verschwinden? Teilweise bleibt noch ein Prozess am laufen, obwohl das Programm eigentlich lange beendet ist. Bei uns ist z.B. Thunderbird solch ein Kandidat.
Als Idee fuer Dich. Wenn Du eh beim Herunterfahren per Script sicherst, lass doch diesen Script pruefen ob Excel oder was immer noch aktiv ist und kill diese Prozesse bevor der Script sichert.
BFF
Hi,
E.
Das Problem ist, dass wenige Male keine app mehr offen war, der Loop aber gleich wohl weiterläuft und EXCEL als offen meldet. Eine manuelle Kontrolle im DOS mit Takslist zeigt dort EXCEL.EXE als Prozess an, obschon er vor fast einer Minute geschlossen wurde.
Gehört denn dieser Prozess dann zu selben, aktuellen Sitzung? Oder ist da vielleicht noch ein anderer Benutzer parallel angemeldet?E.
Hallo,
Wenn's nun fuer Dich funktioniert, setze bitte den Thread als geloest.
Wie kann ich einen Beitrag als gelöst markieren?
Danke und schoene Woche.
BFF
Wenn's nun fuer Dich funktioniert, setze bitte den Thread als geloest.
Wie kann ich einen Beitrag als gelöst markieren?
Danke und schoene Woche.
BFF