Secara selektif menghapus tugas terjadwal sistem

10

Kotak Windows 7 memiliki daftar tugas terjadwal -> Tugas Windows default + Tugas kustom tertentu yang semuanya dimulai dengan string tertentu. Kode sebelumnya menghapus semua tugas dengan perintah:

schtasks /Delete /TN * /F

Alih-alih, kami ingin mempertahankan tugas-tugas Windows default, dan secara selektif menghapus tugas-tugas yang dimulai dengan string tertentu abctask1, katakan abctask2,. Bagaimana cara melangkah lebih jauh? Terima kasih!

Kimi
sumber
Sudahkah Anda mencoba menggunakan sesuatu seperti schtasks /Delete /TN abctask* /F?
Jonah Bishop
1
Tidak bekerja Saya pikir * wildcard tidak berfungsi seperti yang diharapkan.
Jika wildcard tidak berfungsi sebagaimana mestinya, taruhan terbaik Anda mungkin adalah mendapatkan daftar tugas dengan /queryopsi tersebut, mengulanginya menemukan tugas-tugas yang cocok dengan pola yang Anda inginkan, dan membunuh mereka menggunakan nama lengkap mereka. Sesuatu seperti skrip Perl mungkin yang terbaik untuk tugas semacam ini.
Jonah Bishop

Jawaban:

5

Dengan asumsi tugas Anda adalah satu kata (misalnya, abctask1, abctask2 - bukan "abc task 1"), ini harus bekerja:

for /f %%x in ('schtasks /query ^| findstr abctask') do schtasks /Delete /TN %%x /F
Menandai
sumber
1
Saya akan membayangkan bahwa find, menjadi kurang dari 1/4 ukuran findstrakan bereaksi lebih cepat. Juga, keduanya mendukung penggunaan tanda kutip untuk mengelilingi istilah pencarian ( findmengharuskan mereka), melakukan hal itu akan memungkinkan menemukan tugas-tugas seperti "abc task 1" yang Anda sebutkan.
James K
Terima kasih Mark, sebenarnya tidak menerima %% x, saya mengubahnya menjadi% x dan berhasil! :) Bersulang! :)
@ user1620230 Saya berasumsi Anda menjalankan ini dalam file batch. Persen ganda dalam %% x diperlukan dalam file batch, sedangkan% x diperlukan di baris perintah. @ JamesK, saya pikir Anda akan sangat kesulitan untuk menemukan perbedaan kecepatan dunia nyata dalam findvs findstr, terutama dalam sesuatu yang sekecil ini. :-)
Aha, mengerti ya :) Yah ya akhirnya itu mungkin digunakan dalam skrip batch. Terima kasih atas informasinya :)
schtasks / query memotong nama tugas hingga 50 karakter. Opsi / xml menghindari pemotongan. for /f "tokens=2" %%x in ('schtasks /query /xml ^| findstr taskname') do
David
3

Jika Anda ingin wildcard (*) digunakan dalam pemilihan tugas yang akan dihapus, coba gunakan perintah batch sederhana ini:

(hanya sampel)

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

Saya berakhir di sini sambil mencari cara untuk secara otomatis menonaktifkan beberapa tugas terjadwal Windows stok. Saya tidak bisa mendapatkan salah satu contoh saat ini untuk menangani nama tugas dengan benar dengan garis miring terbalik dan spasi. Saya menemukan bahwa menggunakan format csv dan perintah find bekerja paling baik untuk saya:

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

Kalian sedikit membantu di sini. Sementara di atas berfungsi untuk nama yang lebih pendek dan 'user3490' memposting tambahan yang cukup bagus untuk string, sepertinya tidak bekerja dengan nama dengan spasi. Saya menemukan menggunakan wildcard dengan SCHTASKS bekerja dengan '.' daripada '*' dan menemukan modifikasi yang menarik pada string yang memungkinkan kesempatan yang sangat dibutuhkan! Saya akan menempelkan contoh apa yang saya gunakan di dalam file 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"

Terima kasih semuanya di sini untuk petunjuk yang luar biasa! Saya tahu topik ini sudah lebih dari setahun, tapi saya harap ini membantu orang lain yang mungkin belum sampai sejauh ini.

Andrew A Kratz
sumber
1

Jawaban Mark berfungsi dengan baik selama Anda memiliki nama tugas terjadwal yang cukup pendek, tetapi output default schtasks /query(format tabel) memotong nama tugas menjadi 32 karakter, yang menyebabkan kesalahan saat mencoba menghapusnya.

Jika Anda perlu menangani tugas-tugas yang memiliki nama yang lebih panjang, saya akan merekomendasikan menggunakan format output daftar sebagai gantinya, yang tidak terpotong:

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

Jika tugas yang ingin Anda hapus memiliki awalan umum, Anda dapat lebih lanjut memperbaiki kecocokan dari findstr:

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