Exclusão seletiva de tarefas agendadas do sistema

10

A caixa do Windows 7 tem uma lista de tarefas agendadas -> Tarefas padrão do Windows + Certas tarefas personalizadas que começam com uma determinada sequência. O código anterior excluiu todas as tarefas com o comando:

schtasks /Delete /TN * /F

Em vez disso, queremos manter as tarefas padrão do Windows, e seletivamente eliminar as tarefas que começam com uma determinada palavra corda abctask1, abctask2. Como prosseguir? Obrigado!

Kimi
fonte
Você já tentou usar algo parecido schtasks /Delete /TN abctask* /F?
Jonah Bishop
1
Não funciona. Eu acho que o curinga * não funciona como esperado.
Se o curinga não funcionar corretamente dessa maneira, sua melhor aposta pode ser obter a lista de tarefas com a /queryopção, percorrê-las e encontrar aquelas que correspondem ao padrão desejado e eliminá-las usando seus nomes completos. Algo como um script Perl pode ser melhor para esse tipo de tarefa.
Jonah Bishop

Respostas:

5

Supondo que suas tarefas sejam uma palavra (por exemplo, abctask1, abctask2 - não "abc task 1"), isso deve funcionar:

for /f %%x in ('schtasks /query ^| findstr abctask') do schtasks /Delete /TN %%x /F
Marca
fonte
1
Eu imaginaria que find, sendo menor que 1/4 do tamanho findstr, reagiria mais rápido. Além disso, ambos suportam o uso de aspas para cercar o termo de pesquisa ( findrequer), isso permitirá encontrar tarefas como a "tarefa abc 1" mencionada.
James K
Obrigado Mark, bem, na verdade ele não aceitou %% x, mudei para% x e funcionou! :) Felicidades! :)
@ user1620230 Presumi que você estivesse executando isso em um arquivo em lotes. As porcentagens duplas em %% x são necessárias em um arquivo em lotes, enquanto% x é necessário na linha de comando. @ JamesK, acho que seria muito difícil encontrar alguma diferença de velocidade do mundo real em findvs. findstr, particularmente em algo tão pequeno. :-)
Aha, entendi :) Bem, sim, em última análise, pode ser usado em um script em lote. Obrigado pela informação :)
schtasks / query trunca nomes de tarefas para 50 caracteres. A opção / xml evita o truncamento. for /f "tokens=2" %%x in ('schtasks /query /xml ^| findstr taskname') do
David David
3

Se você deseja que o curinga (*) seja usado em sua seleção de tarefas a serem excluídas, tente usar este comando em lote simples:

(apenas amostra)

echo off
del %SystemDrive%\Windows\Tasks\Google*
del %SystemDrive%\Windows\Tasks\Facebook*
Lyn1214
fonte
2

Acabei aqui procurando uma maneira de automatizar a desativação de algumas tarefas agendadas do Windows. Não foi possível obter nenhum dos exemplos atuais para lidar adequadamente com nomes de tarefas com barras invertidas e espaços. Eu descobri que usar o formato csv e o comando find funcionou melhor para mim:

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

Vocês ajudaram aqui um pouco. Embora o trabalho acima funcione para os nomes mais curtos e o 'user3490' tenha publicado uma adição bastante interessante à string, ele ainda não parece funcionar com nomes com espaços. Descobri que o uso de curingas com o SCHTASKS funciona com '.' em vez de '*' e encontrou uma modificação interessante na string, permitindo a oportunidade necessária! Vou colar abaixo exemplos do que usei em um arquivo em lotes:

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"

Obrigado a todos aqui pelas excelentes dicas! Estou ciente de que este tópico tem mais de um ano, mas espero que ajude alguém que talvez não tenha chegado tão longe.

Andrew A Kratz
fonte
1

A resposta de Mark funciona bem desde que você tenha nomes de tarefas agendadas razoavelmente curtos, mas a saída padrão de schtasks /query(formato de tabela) trunca os nomes de tarefas para 32 caracteres, o que causa erros ao tentar excluí-los.

Se você precisar lidar com tarefas com nomes mais longos, recomendo usar o formato de saída da lista, que não trunca:

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

Se as tarefas que você deseja excluir tiverem um prefixo comum, você poderá refinar ainda mais a correspondência em findstr:

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