有选择地删除系统计划的任务


10

Windows 7框包含计划任务的列表->默认Windows任务+某些自定义任务,这些任务均以特定字符串开头。先前的代码使用以下命令删除了所有任务:

schtasks /Delete /TN * /F

相反,我们希望保留默认的Windows任务,并有选择地删除具有一定发言权的字符串开始的任务abctask1abctask2。如何进一步进行?谢谢!


您是否尝试过使用类似的东西schtasks /Delete /TN abctask* /F
乔纳·毕晓普

1
不起作用。我认为*通配符无法正常工作。

如果通配符不能以这种方式正常工作,那么最好的选择是获取带有/query选项的任务列表,循环搜索找到与所需模式匹配的任务,然后使用其全名将其杀死。诸如Perl脚本之类的东西可能最适合此类任务。
乔纳·毕晓普

Answers:


5

假设您的任务是一个单词(例如abctask1,abctask2-而不是“ abc任务1”),则此命令应该有效:

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

1
我可以想象find,小于1/4的大小findstr会更快地做出反应。同样,两者都支持使用引号将搜索词引起来(find需要它们),这样做将允许查找诸如您提到的“ abc任务1”之类的任务。
詹姆斯·K

谢谢Mark,实际上它不接受%% x,我将其更改为%x并成功了!:)干杯!:)

@ user1620230我假设您正在批处理文件中运行它。批处理文件中需要%% x中的双百分数,而命令行中则需要%x。@JamesK,我想您很难在findvs. 上找到任何现实世界的速度差异findstr,尤其是在这么小的东西上。:-)

啊哈,明白了:)好吧,是的,最终它可能会在批处理脚本中使用。感谢您提供的信息:)

schtasks / query将任务名称截断为50个字符。/ xml选项可避免截断。for /f "tokens=2" %%x in ('schtasks /query /xml ^| findstr taskname') do
大卫

3

如果要在选择要删除的任务时使用通配符(*),请尝试使用以下简单的批处理命令:

(仅样品)

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

2

我在这里结束时,正在寻找一种自动禁用一些Windows计划的库存预定任务的方法。我无法获得任何当前示例来正确处理带有反斜杠和空格的任务名称。我发现使用csv格式和find命令最适合我:

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

2

你们在这里帮助了很多。尽管上述适用于较短的名称,并且'user3490'在字符串中添加了一个不错的补充,但它似乎仍然不能与带空格的名称一起使用。我发现在SCHTASKS中将通配符与'。'一起使用 而不是'*',并且发现了对该字符串的有趣修改,从而带来了许多急需的机会!我将在批处理文件中粘贴以下示例:

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"

谢谢大家在这里的出色指示!我知道这个主题已有一年多的历史了,但是我希望这可以帮助到其他人。


1

只要计划的任务名称很短,Mark的答案就可以正常工作,但是schtasks /query(表格式)的默认输出将任务名称截断为32个字符,这在尝试删除它们时会导致错误。

如果您需要处理名称较长的任务,我建议改用列表输出格式,该格式不会截断:

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

如果要删除的任务具有公共前缀,则可以从findstr进一步优化匹配项:

for /f "tokens=2 delims=\" %%x in ('schtasks /query /fo:list ^| findstr ^^abctask') do schtasks /Delete /TN %%x /F
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.