通过 CMD 查找名称中包含“UPDATE”的所有计划的 Windows 任务
Posted
技术标签:
【中文标题】通过 CMD 查找名称中包含“UPDATE”的所有计划的 Windows 任务【英文标题】:Find all scheduled Windows tasks that contain "UPDATE" in the name, via CMD 【发布时间】:2021-08-29 15:27:15 【问题描述】:在试图弄清楚如何以编程方式从 Windows 任务计划器中列出某些任务时,我发现了这一点: How do I delete all tasks whose names begin with "AliUpdater"? @Compo 的批处理语法。
从那里开始,我将下面的批处理查询放在一起,以查找名称中包含“UPDATE”的所有任务:
For /F "Tokens=1*Delims=\" %# In ('SchTasks /Query /FO List^|Find /I "UPDATE"')Do @SchTasks /ShowSid "%$"
但是,语法似乎并不完全正确,因为——虽然它确实列出了所有包含“更新”的任务——但我得到了错误:
Error: Invalid Option / Argument - "[FullTaskPath\TaskName]"
...在每个列出的任务之后。
此外,以这种方式在任务名称中搜索“ZEIT”时,奇怪的是它没有找到任何任务(而是列出了所有任务):
For /F "Tokens=1*Delims=\" %# In ('SchTasks /Query /FO List^|Find /I "ZEIT"')Do @SchTasks /ShowSid "%$"
...在搜索“ZEITG”时,它确实找到了四个包含“zeitg”的任务:
For /F "Tokens=1*Delims=\" %# In ('SchTasks /Query /FO List^|Find /I "ZEITG"')Do @SchTasks /ShowSid "%$"
我的批处理查询语法可能有什么问题?
【问题讨论】:
【参考方案1】:您没有解释您要达到的目标,并且似乎有多个问题,每个问题都有不同的命令 sn-p 和问题。
因此,此示例仅基于您的第一个代码 sn-p,(获取包含不区分大小写的字符串 UPDATE
的任务名称并返回带有计算得到的 SID
的任务名称),作为本网站每个问题处理一个特定问题。
直接在cmd:
For /F Delims^=^" %G In ('%SystemRoot%\System32\schtasks.exe /Query /FO CSV /NH 2^>NUL ^| %SystemRoot%\System32\find.exe /I "UPDATE"') Do @For /F Tokens^=2^ Delims^=^" %H In ('%SystemRoot%\System32\schtasks.exe /ShowSid /TN "%G" 2^>NUL ^| %SystemRoot%\System32\find.exe "SUCCESS:"') Do @Echo(%G:%H
在batch-file:
@Echo Off
SetLocal EnableExtensions
For /F Delims^=^" %%G In ('%SystemRoot%\System32\schtasks.exe /Query /FO CSV
/NH 2^>NUL ^| %SystemRoot%\System32\find.exe /I "UPDATE"'
) Do For /F Tokens^=2^ Delims^=^" %%H In ('%SystemRoot%\System32\schtasks.exe
/ShowSid /TN "%%G" 2^>NUL ^| %SystemRoot%\System32\find.exe "SUCCESS:"'
) Do Echo(%%G:%%H
Pause
但是请注意,我发现 schtasks.exe 的输出有时非常不可靠,因此这可能并不总是产生您期望的所有输出。
【讨论】:
不知道为什么,但是你的 CMD 代码没有在这里列出任何任务,而我上面的第一个 sn-p(在每次输入后抛出一个无效的选项/参数错误)列出了大约 50 个包含在他们的名字(或路径)中写上“更新”。 我刚刚测试了那一行,(在这台计算机上,我应该正在修理),它几乎立即返回了 33 行输出我期望的格式。我还测试了批处理文件,它也产生了与预期相同的 33 行输出! 顺便说一句,我最初的问题的常见具体问题是在我的查询中发现语法错误(在所有 sn-ps 中具有相同的语法)。 很奇怪@David.P,因为我刚刚做了同样的事情并得到了 62 行输出,完全符合我的预期,显然由于海拔升高,其中 29 个任务被额外返回以管理员身份运行时有效的令牌。但是请记住阅读我的脚注,根据我的经验,不能孤立地依赖 shtasks.exe 的输出。您可能会发现获得所有内容的唯一方法,可能没有错误,就是将批处理文件作为 SYSTEM 运行,这意味着您必须将其作为计划任务本身运行。 根据上面链接的输出,schtasks.exe
可能会输出本地化字符串。您可能还需要将英文字符串 "SUCCESS:"
更改为对应的德文字符串。以上是关于通过 CMD 查找名称中包含“UPDATE”的所有计划的 Windows 任务的主要内容,如果未能解决你的问题,请参考以下文章