Вибіркове видалення системних планових завдань


10

У вікні Windows 7 є список запланованих завдань -> Завдання Windows за замовчуванням + Окремі спеціальні завдання, які починаються з певного рядка. Попередній код видалив усі завдання командою:

schtasks /Delete /TN * /F

Замість цього ми хочемо зберегти завдання Windows , за замовчуванням, а також вибірково видаляти завдання , які починаються з певної рядком каже abctask1, abctask2. Як далі діяти? Дякую!


Ви пробували використовувати щось на кшталт schtasks /Delete /TN abctask* /F?
Єпископ Йона

1
Не працює. Я думаю, що * wildcard працює не так, як очікувалося.

Якщо макіяж не працює належним чином таким чином, найкраще поставити список завдань з /queryможливістю прокрутити їх, знайшовши ті, що відповідають бажаному шаблону, і вбити їх, використовуючи їх повні імена. Щось подібне до сценарію Perl, можливо, найкраще підійде для такого роду завдань.
Єпископ Йона

Відповіді:


5

Припустимо, що ваші завдання - це одне слово (наприклад, abctask1, abctask2 - не "abc завдання 1"), це має працювати:

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

1
Я б міг уявити, що find, будучи меншим на 1/4 розміром findstr, реагуватиме швидше. Також обидва підтримують використання лапок для оточення пошукового терміну ( findвимагає їх), що дозволить знайти такі завдання, як "abc task 1", яку ви згадали.
Джеймс К

Дякую Марку, ну насправді він не прийняв %% x, я змінив його на% x і він працював! :) Привіт! :)

@ user1620230 Я припускав, що ви запускаєте це в пакетному файлі. Подвійні відсотки в %% x потрібні у пакетному файлі, тоді як% x потрібен у командному рядку. @JamesK, я думаю, вам буде дуже важко знайти будь-яку різницю швидкості в реальному світі findпорівняно findstr, особливо в чомусь такому невеликому. :-)

Ага, у вас :) Ну так, зрештою, це може бути використане в пакетному сценарії. Дякую за інформацію :)

schtasks / query обрізає назви завдань до 50 символів. Параметр / xml дозволяє уникнути усікання. for /f "tokens=2" %%x in ('schtasks /query /xml ^| findstr taskname') do
Девід

3

Якщо ви хочете, щоб під час вибору завдань для видалення використовувався символ wildcard (*), спробуйте скористатися цією простою пакетною командою:

(лише зразок)

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

2

Я опинився тут, шукаючи спосіб автоматизації відключення деяких запланованих завдань Windows. Я не міг отримати жодного з поточних прикладів, щоб правильно обробляти імена завдань з косою косою рискою та пробілами. Я виявив, що для мене найкраще працює формат csv та команда find:

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

2

Ви, хлопці, дуже допомогли тут. Хоча вищезазначені роботи для коротших імен та 'user3490' розмістили досить приємне доповнення до рядка, він все ще не здався працювати з іменами з пробілами. Я виявив, що за допомогою символів "SCHTASKS" працює "." а не '*' і знайшов цікаву модифікацію рядка, що дозволяє дуже потрібну можливість! Я вставлю нижче приклади того, що я використовував у пакетному файлі:

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"

Дякую всім вам тут за чудові покажчики! Мені відомо, що цій темі вже понад рік, але сподіваюся, що це допоможе комусь іншому, хто, можливо, ще не дійшов до цього.


1

Відповідь Марка працює добре, якщо у вас досить короткі заплановані назви завдань, але вихідний за замовчуванням schtasks /query(формат таблиці) обрізає імена завдань до 32 символів, що викликає помилки при спробі їх видалення.

Якщо вам потрібно розібратися із завданнями, які мають довші імена, я б рекомендував використовувати замість цього вихідний формат списку, який не скорочується:

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

Якщо завдання, які потрібно видалити, мають загальний префікс, ви можете додатково уточнити відповідність із findstr:

for /f "tokens=2 delims=\" %%x in ('schtasks /query /fo:list ^| findstr ^^abctask') do schtasks /Delete /TN %%x /F
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.