Kadaj Geschrieben 17. Juni 2010 Geschrieben 17. Juni 2010 Hallo, vielleicht kann mir jemand weiterhelfen. Ich möchte folgendes in einer batch realisieren: Mittels des tasklist-Befehls und dem Parameter /FI lasse ich mir eine Liste von Prozessen anzeigen. @echo off tasklist /FI "username eq lehmanns" /FI "imagename ne explorer.exe" /FI "imagename ne cmd.exe" /FI "imagename ne realmon.exe" /FI "imagename ne ctfmon.exe" /FI "imagename ne fpassist.exe" /FI "imagename ne jusched.exe" /FI "imagename ne hqtray.exe" /FI "imagename ne jucheck.exe" /FI "imagename ne tasklist.exe" pause So sieht die batch bisher aus. Das ist leider nur die Ausgabe der Prozesse. Nun möchte ich diese innerhalb der batch auch gleich alle beenden. Ich dachte, dass ich einfach alle Prozesse mit einer Schleife in Variablen speichern kann, weiß aber nicht wie ich das realisieren soll. Hat vielleicht jemand eine Idee? :beagolisc Zitieren
lupo49 Geschrieben 17. Juni 2010 Geschrieben 17. Juni 2010 (bearbeitet) @echo off tasklist /FI "imagename eq svchost.exe" > foo.txt FOR /F "tokens=2 skip=3" %%i IN (foo.txt) DO ( ECHO PID: %%i wird beendet taskkill /PID %%i ) Das geht auch direkt über taskkill.exe mit dem Schalter "/IM". Bearbeitet 17. Juni 2010 von lupo49 Zitieren
Kadaj Geschrieben 17. Juni 2010 Autor Geschrieben 17. Juni 2010 (bearbeitet) Danke, für deine schnelle Antwort. Das mit dem "> *.txt" hatte ich auch schon gefunden, nur funktioniert es in diesem Fall nicht; vermutlich ist die Abfrage zu lang? Das geht auch direkt über taskkill.exe mit dem Schalter "/IM". Ich weiß schon, nur dann müsste ich jeden Prozess manuell eingeben Bearbeitet 17. Juni 2010 von Kadaj Zitieren
Kadaj Geschrieben 17. Juni 2010 Autor Geschrieben 17. Juni 2010 (bearbeitet) Ok, ich nehme alles zurück und behaupte das Gegenteil:old Es wird zwar ausgegeben, dass der Befehl ungültig ist, aber die batch-Datei macht trotzdem was sie machen soll :confused: sehr seltsam Einziges Problem ist noch, dass jeder Prozess nur einmal beendet wird. Wenn ich 2 pdf-Dokumente offen habe, dann wird nur eins beendet, aber das sollte ja auch kein Problem sein. Vielen Dank lupo49 Bearbeitet 17. Juni 2010 von Kadaj Zitieren
lupo49 Geschrieben 17. Juni 2010 Geschrieben 17. Juni 2010 Wie sieht den tasklist bei dir aus, wenn du zwei PDF-Dateien geöffnet hast? Zitieren
Kadaj Geschrieben 18. Juni 2010 Autor Geschrieben 18. Juni 2010 Der Prozess taucht immer nur einmal auf, auch wenn ich mehrere PDFs offen habe. Das Problem ist aber, dass er trotzdem immer nur eine PDF schließt und der prozess so lange vorhanden ist, bis alle PDFs geschlossen sind. Da musst ich mir was anderes einfallen lassen. Zuerst hatte ich eine Schleife, die sich so lange wiederholt, bis sich der errorlevel ändert, aber da taskkill erst eine Fehlermeldung ausgeben musste, bis die Schleife abbricht, hab ich lieber was anderes genommen. So sieht es aus: @echo off :anfang tasklist /FI "username eq lehmanns" /FI "imagename ne explorer.exe" /FI "imagename ne acrord32info.exe" /FI "imagename ne firefox.exe" /FI "imagename ne cmd.exe" /FI "imagename ne realmon.exe" /FI "imagename ne ctfmon.exe" /FI "imagename ne fpassist.exe" /FI "imagename ne jusched.exe" /FI "imagename ne hqtray.exe" /FI "imagename ne jucheck.exe" /FI "imagename ne tasklist.exe" > prozess.txt FOR /F "tokens=2 skip=3" %%i IN (prozess.txt) DO ( ECHO PID: %%i wird beendet taskkill /PID %%i ) for /R %%A in (prozess.txt) do ( for %%I in ("%%A") do call :varBytes "%%A" %%~zI ) :varBytes SET end=B SET /A var=%2 echo Die Datei %1 ist %var% %end% gross if %var% == 0 ( echo Die Prozesse wurden alle beendet. goto :ende ) ELSE ( echo Sprung zum Anfang. Die Prozesse werden neu ermittelt... goto :anfang ) :ende pause Am Ende überprüft er einfach ob die Datei, in der die Prozesse gespeichert wurden leer ist. Wenn ja, dann ist er fertig und wenn nicht, macht er die Prozessabfrage nochmal, speichert die Prozesse erneut und beendet sie wieder. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.