alicudi2000
Goto Top

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

Content-Key: 347338

Url: https://administrator.de/contentid/347338

Printed on: April 24, 2024 at 13:04 o'clock

Member: beidermachtvongreyscull
beidermachtvongreyscull Aug 27, 2017 at 07:45:52 (UTC)
Goto Top
Moin,,

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.
Member: Alicudi2000
Alicudi2000 Aug 27, 2017 at 13:46:14 (UTC)
Goto Top
Hallo beidermachtvongreyscull

Danke für den Hinweis, den Code künftig in die vorgesehene Vorlage einzutragen. Die Zeilennummer ist ja hilfreich für den Fragestellenden und die Antwortenden..

Obschon ich die errorlevels nicht zurücksetzte, klappt der Code in dieser Hinsicht. Überprüft habe ich das jeweils mit Zeile 21 und 23 (ohne REM). Sind 3 apps offen ist die Antwort 3, ist eine offen, ist die Antwort 1, lösche ich während dem Loop eine app, ist die Antwort um eins niedriger.

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.

Da ich eine 100% Lösung brauche, werde ich den Programmaufruf mit Batch im Autostart lösen und die Sicherung mit einem Skript beim Herunterfahren (gpedit.msc)

Danke nochmals für Deine Stellungnahme
Member: BassFishFox
Solution BassFishFox Aug 27, 2017 at 17:35:49 (UTC)
Goto Top
Hallo,

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
Member: emeriks
Solution emeriks Aug 27, 2017 at 19:04:28 (UTC)
Goto Top
Hi,
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.
Member: Alicudi2000
Alicudi2000 Aug 27, 2017 at 22:33:57 (UTC)
Goto Top
Vielen Dank BassFishFox

Sowas habe ich vermutet, hatte aber nicht die Geduld solange zu warten, bis der Prozess nicht mehr auf der Liste erscheint. Habe das Problem tatsächlich mit gpedit.msc Skript herunterfahren gelöst und es klappt. Danke für die Idee des Prüfens und ev. killen! Erfolgreichen Wochenstart wünsche ich
Member: Alicudi2000
Alicudi2000 Aug 27, 2017 at 22:37:49 (UTC)
Goto Top
Vielen Dank emeriks für die Idee. Es ist aber garantiert nur ein Benutzer angemeldet, da man sich mit der Produktionsstrasse und Passwort anmelden muss. Zudem trat der Fehler bei Testläufen statt. Auch Dir erfolgreichen Wochenstart
Member: BassFishFox
Solution BassFishFox Aug 27, 2017 at 22:59:27 (UTC)
Goto Top
Hallo,

Wenn's nun fuer Dich funktioniert, setze bitte den Thread als geloest.
How can I mark a post as solved?

Danke und schoene Woche.

BFF