Выборочное удаление запланированных задач системы


10

Окно Windows 7 содержит список запланированных задач -> Задачи Windows по умолчанию + Некоторые пользовательские задачи, которые начинаются с определенной строки. Предыдущий код удалил все задачи с помощью команды:

schtasks /Delete /TN * /F

Вместо этого мы хотим сохранить задачи Windows , по умолчанию, а также выборочно удалять задачи , которые начинаются с определенной строкой говорит abctask1, abctask2. Как продолжить дальше? Спасибо!


Вы пытались использовать что-то подобное schtasks /Delete /TN abctask* /F?
Иона Бишоп

1
Не работает Я думаю, что подстановочный знак * не работает, как ожидалось.

Если подстановочный знак не работает должным образом таким образом, лучше всего было бы получить список задач с /queryопцией, просмотреть их, найти те, которые соответствуют вашему желаемому шаблону, и убить их, используя их полные имена. Что-то вроде Perl-скрипта может быть лучше для такого рода задач.
Иона Бишоп

Ответы:


5

Предполагая, что ваши задачи - это одно слово (например, abctask1, abctask2 - не «abc task 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, я думаю , вы бы очень трудно найти какую - либо разницу скорости в реальном мире в findVS. findstr, особенно в чем - то в этом небольшом. :-)

Ага, понял :) Ну да, в конечном итоге это может быть использовано в пакетном скрипте. Спасибо за информацию :)

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

3

Если вы хотите использовать подстановочный знак (*) при выборе задач для удаления, попробуйте использовать эту простую пакетную команду:

(только образец)

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

2

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

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.