Sistem zamanlanmış görevlerini seçici olarak silme


10

Windows 7 kutusunda zamanlanmış görevlerin bir listesi vardır -> Varsayılan Windows görevleri + Belirli bir dizeyle başlayan belirli özel görevler. Önceki kod, şu komutla tüm görevleri sildi:

schtasks /Delete /TN * /F

Bunun yerine varsayılan Windows görevleri korumak ve seçici belli dize sözü söyleyen başlamak görevleri silmek istediğiniz abctask1, abctask2. Nasıl devam edilir? Teşekkürler!


Gibi bir şey kullanmayı denedin schtasks /Delete /TN abctask* /Fmi?
Jonah Bishop

1
Çalışmıyor. Bence * joker karakter beklendiği gibi çalışmıyor.

Joker karakter bu şekilde düzgün çalışmazsa, en iyi /queryseçeneğiniz, seçenekle görevlerin listesini elde etmek, istediğiniz desenle eşleşenleri bulmak için döngülemek ve tam adlarını kullanarak onları öldürmek olabilir. Bu tür bir görev için Perl betiği gibi bir şey en iyisi olabilir.
Jonah Bishop

Yanıtlar:


5

Görevlerinizin tek bir kelime olduğunu varsayarsak (örneğin, abctask1, abctask2 - "abc görev 1" değil), bunun çalışması gerekir:

for /f %%x in ('schtasks /query ^| findstr abctask') do schtasks /Delete /TN %%x /F

1
findBüyüklüğünün 1 / 4'ünden daha az olmanın daha findstrhızlı tepki vereceğini hayal ediyorum. Ayrıca, her ikisi de arama terimini çevrelemek için tırnak işaretlerinin kullanımını destekler ( findbunları gerektirir), bu da bahsettiğiniz "abc görev 1" gibi görevleri bulmanıza olanak tanır.
James K

Teşekkürler Mark, aslında %% x kabul etmedi,% x olarak değiştirdim ve işe yaradı! :) Şerefe! :)

@ user1620230 Bunu bir toplu iş dosyasında çalıştırdığınızı varsaydım. %% x içindeki çift yüzdeler bir toplu iş dosyasında,% x ise komut satırında gereklidir. @JamesK, sanırım vs.'ye findkarşı findstr, özellikle bu kadar küçük bir şeyde gerçek hız farkı bulmak için çok zorlanacaksınız . :-)

Aha, seni yakaladım :) Pekala evet sonuçta toplu bir senaryoda kullanılabilir. Bilgi için teşekkürler :)

schtasks / query, görev adlarını 50 karaktere kadar keser. / Xml seçeneği kesmeyi önler. for /f "tokens=2" %%x in ('schtasks /query /xml ^| findstr taskname') do
David

3

Silinecek görev seçiminizde joker karakterin (*) kullanılmasını istiyorsanız, bu basit toplu komutu kullanmayı deneyin:

(sadece örnek)

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

2

Ben burada bazı stok Windows zamanlanmış görevler devre dışı bırakma otomatikleştirmek için bir yol ararken sona erdi. Görev adlarını ters eğik çizgiler ve boşluklarla düzgün işlemek için geçerli örneklerden hiçbirini alamadım. Ben csv biçimini ve find komutunu kullanarak benim için en iyi sonuç buldum:

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

2

Buraya biraz yardım ettiniz. Yukarıdaki kısa isimler için çalışıyor ve 'user3490' dize oldukça güzel bir ek gönderdi, ancak yine de boşluklu isimler ile çalışmak gibi görünmüyordu. SCHTASKS ile joker karakterler kullanarak '.' yerine '*' yerine çok ihtiyaç duyulan fırsata ilginç bir değişiklik yaptı! Bir toplu iş dosyasında kullandığım örneklerin altına yapıştıracağım:

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"

Burada mükemmel işaretçiler için teşekkür ederiz! Bu konunun bir yaşın üzerinde olduğunun farkındayım, ancak umarım bu, bu kadar ileri gitmemiş başka birine yardımcı olur.


1

Mark'ın yanıtı, oldukça kısa zamanlanmış görev adlarınız olduğu sürece iyi çalışır, ancak varsayılan schtasks /query(tablo biçimi) çıktısı , görev adlarını 32 karaktere böler ve bu da onları silmeye çalışırken hatalara neden olur.

Daha uzun adlara sahip görevlerle uğraşmanız gerekiyorsa, bunun yerine kısaltılmayan liste çıktı biçimini kullanmanızı öneririm:

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

Silmek istediğiniz görevlerin ortak bir öneki varsa, maçı findstr'den daha da daraltabilirsiniz:

for /f "tokens=2 delims=\" %%x in ('schtasks /query /fo:list ^| findstr ^^abctask') do schtasks /Delete /TN %%x /F
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.