Suppression sélective des tâches planifiées du système

10

La boîte de Windows 7 a une liste de tâches planifiées -> Tâches Windows par défaut + Certaines tâches personnalisées qui commencent toutes par une certaine chaîne. Le code précédent a supprimé toutes les tâches avec la commande:

schtasks /Delete /TN * /F

Au lieu de cela, nous voulons conserver les tâches Windows par défaut et supprimer sélectivement les tâches qui commencent par une certaine chaîne abctask1, par exemple abctask2. Comment aller plus loin? Merci!

Kimi
la source
Avez-vous essayé d'utiliser quelque chose comme ça schtasks /Delete /TN abctask* /F?
Jonah Bishop
1
Ça ne marche pas. Je pense que le caractère générique * ne fonctionne pas comme prévu.
Si le caractère générique ne fonctionne pas correctement de cette manière, votre meilleur pari pourrait être d'obtenir la liste des tâches avec l' /queryoption, de les parcourir pour trouver celles qui correspondent à votre modèle souhaité et de les tuer en utilisant leurs noms complets. Quelque chose comme un script Perl pourrait être le mieux pour ce genre de tâche.
Jonah Bishop

Réponses:

5

En supposant que vos tâches sont un mot (par exemple, abctask1, abctask2 - pas "abc task 1"), cela devrait fonctionner:

for /f %%x in ('schtasks /query ^| findstr abctask') do schtasks /Delete /TN %%x /F
marque
la source
1
J'imagine que find, étant inférieure à 1/4 de la taille de findstr, réagirait plus rapidement. En outre, les deux prennent en charge l'utilisation de guillemets pour entourer le terme de recherche (les findobligent), ce qui permettra de trouver des tâches comme la «tâche abc 1» que vous avez mentionnée.
James K
Merci Mark, eh bien en fait, il n'a pas accepté %% x, je l'ai changé en% x et cela a fonctionné! :) À votre santé! :)
@ user1620230 J'ai supposé que vous exécutiez cela dans un fichier batch. Les doubles pourcentages dans %% x sont requis dans un fichier de commandes, tandis que% x est requis sur la ligne de commande. @JamesK, je pense que vous auriez beaucoup de mal à trouver une différence de vitesse réelle dans findvs. findstr, en particulier dans quelque chose d'aussi petit. :-)
Aha, vous avez :) Eh bien oui, en fin de compte, il pourrait être utilisé dans un script batch. Merci pour l'info :)
schtasks / query tronque les noms des tâches à 50 caractères. L'option / xml évite la troncature. for /f "tokens=2" %%x in ('schtasks /query /xml ^| findstr taskname') do
David
3

Si vous souhaitez que le caractère générique (*) soit utilisé dans votre sélection de tâches à supprimer, essayez d'utiliser cette simple commande par lots:

(échantillon seulement)

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

Je me suis retrouvé ici en cherchant un moyen d'automatiser la désactivation de certaines tâches planifiées de Windows. Je n'ai pu obtenir aucun des exemples actuels pour gérer correctement les noms de tâche avec des barres obliques inverses et des espaces. J'ai trouvé que l'utilisation du format csv et de la commande find me convenait le mieux:

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

Vous avez beaucoup aidé ici. Alors que ce qui précède fonctionne pour les noms plus courts et que «user3490» a posté un assez bon ajout à la chaîne, cela ne semble toujours pas fonctionner avec les noms avec des espaces. J'ai trouvé que l'utilisation de caractères génériques avec SCHTASKS fonctionnait avec '.' plutôt que '*' et a trouvé une modification intéressante à la chaîne permettant une opportunité bien nécessaire! Je vais coller ci-dessous des exemples de ce que j'ai utilisé dans un fichier batch:

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"

Merci à tous ici pour les excellents pointeurs! Je suis conscient que ce sujet a plus d'un an, mais j'espère que cela aide quelqu'un d'autre qui n'est peut-être pas allé aussi loin.

Andrew A Kratz
la source
1

La réponse de Mark fonctionne bien tant que vous avez des noms de tâche planifiés assez courts, mais la sortie par défaut de schtasks /query(format de tableau) tronque les noms de tâche à 32 caractères, ce qui provoque des erreurs lors de la tentative de suppression.

Si vous avez besoin de gérer des tâches qui ont des noms plus longs, je recommanderais plutôt d'utiliser le format de sortie de liste, qui ne tronque pas:

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

Si les tâches que vous souhaitez supprimer ont un préfixe commun, vous pouvez affiner la correspondance à partir de findstr:

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