Vom System geplante Aufgaben selektiv löschen


10

Die Windows 7-Box enthält eine Liste der geplanten Aufgaben -> Standard-Windows-Aufgaben + Bestimmte benutzerdefinierte Aufgaben, die alle mit einer bestimmten Zeichenfolge beginnen. Der vorherige Code hat alle Aufgaben mit dem folgenden Befehl gelöscht:

schtasks /Delete /TN * /F

Stattdessen wollen wir die Standard - Windows - Aufgaben behalten, und selektiv die Aufgaben zu löschen , die mit einer bestimmten Zeichenkette beginnen sagen abctask1, abctask2. Wie wir weiter vorgehen? Vielen Dank!


Haben Sie versucht, so etwas zu verwenden schtasks /Delete /TN abctask* /F?
Jonah Bishop

1
Funktioniert nicht Ich denke, der Platzhalter * funktioniert nicht wie erwartet.

Wenn der Platzhalter auf diese Weise nicht richtig funktioniert, ist es möglicherweise am besten, die Liste der Aufgaben mit der /queryOption zu erhalten, sie zu durchlaufen, um diejenigen zu finden, die Ihrem gewünschten Muster entsprechen, und sie mit ihren vollständigen Namen zu töten. So etwas wie ein Perl-Skript ist möglicherweise am besten für diese Art von Aufgabe geeignet.
Jonah Bishop

Antworten:


5

Angenommen, Ihre Aufgaben sind ein Wort (z. B. abctask1, abctask2 - nicht "abc task 1"), sollte dies funktionieren:

for /f %%x in ('schtasks /query ^| findstr abctask') do schtasks /Delete /TN %%x /F

1
Ich würde mir vorstellen, dass findeine Größe von weniger als 1/4 findstrschneller reagieren würde. Außerdem unterstützen beide die Verwendung von Anführungszeichen, um den Suchbegriff zu umgeben ( finderfordert sie). Auf diese Weise können Sie Aufgaben wie die von Ihnen erwähnte "abc task 1" finden.
James K

Danke Mark, eigentlich hat es %% x nicht akzeptiert, ich habe es in% x geändert und es hat funktioniert! :) Prost! :)

@ user1620230 Ich nahm an, dass Sie dies in einer Batch-Datei ausführen. Die doppelten Prozentsätze in %% x sind in einer Batchdatei erforderlich, während% x in der Befehlszeile erforderlich ist. @JamesK, ich glaube , Sie sehr schwer tun , würde jede reale Geschwindigkeitsdifferenz in finden findvs. findstr, vor allem in etwas so klein. :-)

Aha, hast du :) Nun ja, letztendlich könnte es in einem Batch-Skript verwendet werden. Danke für die Info :)

schtasks / query schneidet Aufgabennamen auf 50 Zeichen ab. Die Option / xml vermeidet das Abschneiden. for /f "tokens=2" %%x in ('schtasks /query /xml ^| findstr taskname') do
David

3

Wenn Sie möchten, dass bei der Auswahl der zu löschenden Aufgaben ein Platzhalter (*) verwendet wird, verwenden Sie diesen einfachen Stapelbefehl:

(nur Beispiele)

echo off
del %SystemDrive%\Windows\Tasks\Google*
del %SystemDrive%\Windows\Tasks\Facebook*

2

Ich bin hier gelandet, als ich nach einer Möglichkeit gesucht habe, das Deaktivieren einiger geplanter Windows-Standardaufgaben zu automatisieren. Ich konnte keines der aktuellen Beispiele dazu bringen, Aufgabennamen mit Backslashes und Leerzeichen richtig zu behandeln. Ich fand, dass die Verwendung des CSV-Formats und des Befehls find für mich am besten funktioniert:

for /f "tokens=1 delims=," %%x in ('schtasks /query /fo csv ^| find "\Microsoft\Windows\Application Experience\"') do schtasks /Delete /TN %%x /F

2

Ihr habt hier ziemlich viel geholfen. Während das Obige für die kürzeren Namen funktioniert und 'user3490' eine nette Ergänzung zur Zeichenfolge gepostet hat, schien es immer noch nicht mit Namen mit Leerzeichen zu funktionieren. Ich habe festgestellt, dass die Verwendung von Platzhaltern mit SCHTASKS mit '.' anstatt '*' und fand eine interessante Modifikation an der Saite, die dringend benötigte Gelegenheit bietet! Ich werde unten Beispiele von dem einfügen, was ich in einer Batch-Datei verwendet habe:

for /f "tokens=2 delims=\" %%x in ('SCHTASKS /QUERY /FO:LIST ^| FINDSTR "AVGPCTuneUp_Task."') do SCHTASKS /DELETE /F /TN "\%%x"

for /f "tokens=2 delims=\" %%x in ('SCHTASKS /QUERY /FO:LIST ^| FINDSTR "AMD.Updater."') do SCHTASKS /DELETE /F /TN "\%%x"

for /f "tokens=2 delims=\" %%x in ('SCHTASKS /QUERY /FO:LIST ^| FINDSTR "Lenovo.Smile."') do SCHTASKS /DELETE /F /TN "\%%x"

Vielen Dank hier für die hervorragenden Hinweise! Ich bin mir bewusst, dass dieses Thema über ein Jahr alt ist, aber ich hoffe, dass dies jemand anderem hilft, der möglicherweise noch nicht so weit gekommen ist.


1

Marks Antwort funktioniert einwandfrei, solange Sie relativ kurze geplante Aufgabennamen haben, aber die Standardausgabe von schtasks /query(Tabellenformat) schneidet die Aufgabennamen auf 32 Zeichen ab, was beim Versuch, sie zu löschen, zu Fehlern führt.

Wenn Sie sich mit Aufgaben befassen müssen, die längere Namen haben, würde ich empfehlen, stattdessen das Listenausgabeformat zu verwenden, das nicht abgeschnitten wird:

for /f "tokens=2 delims=\" %%x in ('schtasks /query /fo:list ^| findstr abctask') do schtasks /Delete /TN %%x /F

Wenn die Aufgaben, die Sie löschen möchten, ein gemeinsames Präfix haben, können Sie die Übereinstimmung in findstr weiter verfeinern:

for /f "tokens=2 delims=\" %%x in ('schtasks /query /fo:list ^| findstr ^^abctask') do schtasks /Delete /TN %%x /F
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.