Eliminar selectivamente las tareas programadas del sistema

10

El cuadro de Windows 7 tiene una lista de tareas programadas -> Tareas predeterminadas de Windows + Ciertas tareas personalizadas que comienzan con una cadena determinada. El código anterior eliminó todas las tareas con el comando:

schtasks /Delete /TN * /F

En lugar queremos mantener las tareas de Windows por defecto, y de forma selectiva eliminar las tareas que se inician con una cierta cadena digamos abctask1, abctask2. ¿Cómo proceder más? ¡Gracias!

Kimi
fuente
¿Has intentado usar algo como schtasks /Delete /TN abctask* /F?
Jonás Obispo
1
No funciona Creo que el comodín * no funciona como se esperaba.
Si el comodín no funciona correctamente de esa manera, su mejor /queryopción podría ser obtener la lista de tareas con la opción, recorrerlas para encontrar las que coincidan con su patrón deseado y eliminarlas usando sus nombres completos. Algo así como un script Perl podría ser lo mejor para este tipo de tarea.
Jonás Obispo

Respuestas:

5

Asumiendo que sus tareas son una palabra (por ejemplo, abctask1, abctask2 - no "abc task 1"), esto debería funcionar:

for /f %%x in ('schtasks /query ^| findstr abctask') do schtasks /Delete /TN %%x /F
marca
fuente
1
Me imagino que find, siendo menos de 1/4 del tamaño de findstrreaccionaría más rápido. Además, ambos admiten el uso de comillas para rodear el término de búsqueda (los findrequiere), lo que permitirá encontrar tareas como la "tarea abc 1" que mencionó.
James K
Gracias Mark, bueno, en realidad no aceptó %% x, ¡lo cambié a% x y funcionó! :) ¡Salud! :)
@ user1620230 Supuse que estaba ejecutando esto en un archivo por lotes. Los porcentajes dobles en %% x se requieren en un archivo por lotes, mientras que% x se requiere en la línea de comando. @JamesK, creo que sería muy difícil encontrar alguna diferencia de velocidad en el mundo real en findvs. findstr, particularmente en algo tan pequeño. :-)
Ajá, te tengo :) Bueno, sí, en última instancia, podría usarse en un script por lotes. Gracias por la información :)
schtasks / query trunca los nombres de tareas a 50 caracteres. La opción / xml evita el truncamiento. for /f "tokens=2" %%x in ('schtasks /query /xml ^| findstr taskname') do
David
3

Si desea que se use el comodín (*) en su selección de tareas para eliminar, intente usar este simple comando por lotes:

(Sólo prueba)

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

Terminé aquí mientras buscaba una forma de automatizar la desactivación de algunas tareas programadas de Windows. No pude obtener ninguno de los ejemplos actuales para manejar adecuadamente los nombres de tareas con barras diagonales invertidas y espacios. Descubrí que usar el formato csv y el comando find funcionó mejor para mí:

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

Ustedes han ayudado mucho aquí. Si bien lo anterior funciona para los nombres más cortos y 'user3490' publicó una buena adición a la cadena, todavía no parecía funcionar con nombres con espacios. Encontré que usar comodines con SCHTASKS funciona con '.' en lugar de '*' y encontró una modificación interesante a la cadena que permite la oportunidad que tanto necesita. Pegaré a continuación ejemplos de lo que usé en un archivo por 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"

¡Gracias a todos por los excelentes consejos! Soy consciente de que este tema tiene más de un año, pero espero que esto ayude a alguien que no haya llegado tan lejos.

Andrew A Kratz
fuente
1

La respuesta de Mark funciona bien siempre que tenga nombres de tarea programados bastante cortos, pero la salida predeterminada de schtasks /query(formato de tabla) trunca los nombres de tarea a 32 caracteres, lo que provoca errores al intentar eliminarlos.

Si necesita lidiar con tareas que tienen nombres más largos, recomendaría usar el formato de salida de la lista, que no se trunca:

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

Si las tareas que desea eliminar tienen un prefijo común, puede refinar aún más la coincidencia desde FindStr:

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