Selektywne usuwanie zaplanowanych zadań systemowych

10

Windows 7 ma listę zaplanowanych zadań -> Domyślne zadania Windows + Niektóre niestandardowe zadania, które zaczynają się od określonego ciągu. Poprzedni kod usunął wszystkie zadania za pomocą polecenia:

schtasks /Delete /TN * /F

Zamiast tego chcemy zachować domyślne zadania systemu Windows i selektywnie usunąć zadania rozpoczynające się od określonego ciągu abctask1, np abctask2. Jak kontynuować? Dzięki!

Kimi
źródło
Czy próbowałeś użyć czegoś takiego schtasks /Delete /TN abctask* /F?
Jonah Bishop
1
Nie działa Myślę, że * symbol wieloznaczny nie działa zgodnie z oczekiwaniami.
Jeśli symbol wieloznaczny nie działa poprawnie w ten sposób, najlepszym rozwiązaniem może być uzyskanie listy zadań z /queryopcją, przeglądanie ich w celu znalezienia tych, które pasują do pożądanego wzorca, i zabijanie ich przy użyciu ich pełnych nazw. Coś takiego jak skrypt Perla może być najlepsze do tego rodzaju zadań.
Jonah Bishop

Odpowiedzi:

5

Zakładając, że twoje zadania są jednym słowem (np. Abctask1, abctask2 - nie „abc task 1”), powinno to działać:

for /f %%x in ('schtasks /query ^| findstr abctask') do schtasks /Delete /TN %%x /F
znak
źródło
1
Wyobrażam sobie find, że mniejszy niż 1/4 wielkości findstrzareagowałby szybciej. Oba obsługują także użycie cudzysłowów dookoła wyszukiwanego hasła ( findwymaga ich), ponieważ pozwoli to na znalezienie zadań takich jak „zadanie abc 1”, o którym wspomniałeś.
James K
Dzięki Mark, właściwie to nie zaakceptował %% x, zmieniłem go na% x i zadziałało! :) Twoje zdrowie! :)
@ user1620230 Zakładam, że działasz w pliku wsadowym. Podwójne procenty w %% x są wymagane w pliku wsadowym, podczas gdy% x jest wymagany w wierszu poleceń. @JamesK, myślę, że bardzo trudno byłoby znaleźć jakąkolwiek rzeczywistą różnicę prędkości w findporównaniu z findstr, szczególnie w czymś tak małym. :-)
Aha, mam cię :) Cóż, tak, ostatecznie można go użyć w skrypcie wsadowym. Dzięki za informację :)
schtasks / query skraca nazwy zadań do 50 znaków. Opcja / xml unika obcięcia. for /f "tokens=2" %%x in ('schtasks /query /xml ^| findstr taskname') do
David
3

Jeśli chcesz użyć symbolu wieloznacznego (*) do wyboru zadań do usunięcia, spróbuj użyć tego prostego polecenia wsadowego:

(tylko próbka)

echo off
del %SystemDrive%\Windows\Tasks\Google*
del %SystemDrive%\Windows\Tasks\Facebook*
Lyn1214
źródło
2

Skończyłem tutaj, szukając sposobu na automatyzację wyłączania niektórych standardowych zadań Windows. Nie mogłem uzyskać żadnego z bieżących przykładów, aby poprawnie obsługiwać nazwy zadań za pomocą odwrotnych ukośników i spacji. Przekonałem się, że użycie formatu csv i polecenia find działały dla mnie najlepiej:

for /f "tokens=1 delims=," %%x in ('schtasks /query /fo csv ^| find "\Microsoft\Windows\Application Experience\"') do schtasks /Delete /TN %%x /F
bskip
źródło
2

Pomogliście tu całkiem sporo. Chociaż powyższe działa w przypadku krótszych nazw, a „user3490” opublikował całkiem niezły dodatek do ciągu, nadal nie działa z nazwami ze spacjami. Zauważyłem, że używanie symboli wieloznacznych w SCHTASKS-ach działa z „.” zamiast „*” i znalazłem interesującą modyfikację ciągu, która dała bardzo potrzebną okazję! Wkleję poniżej przykłady tego, czego użyłem w pliku wsadowym:

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"

Dziękuję wam wszystkim za doskonałe wskazówki! Wiem, że ten temat ma ponad rok, ale mam nadzieję, że pomoże to komuś innemu, kto mógł nie dotrzeć tak daleko.

Andrew A Kratz
źródło
1

Odpowiedź Marka działa dobrze, o ile masz dość krótkie zaplanowane nazwy zadań, ale domyślne wyjście to schtasks /query (format tabeli) skraca nazwy zadań do 32 znaków, co powoduje błędy podczas próby ich usunięcia.

Jeśli musisz poradzić sobie z zadaniami o dłuższych nazwach, zaleciłbym zamiast tego użycie formatu wyjściowego listy, który nie obcina:

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

Jeśli zadania, które chcesz usunąć, mają wspólny prefiks, możesz dodatkowo zawęzić dopasowanie z findstr:

for /f "tokens=2 delims=\" %%x in ('schtasks /query /fo:list ^| findstr ^^abctask') do schtasks /Delete /TN %%x /F
użytkownik3490
źródło