tasklist.exe中的过滤器不带通配符?

Dav*_*osh 18 cmd tasklist filter windows-7 windows-8

操作系统:Windows XP,Windows 7 64位.

我们有一些相当庞大的cmd脚本,用于一些日常构建过程.这些脚本产生了许多其他(窗口化)进程.有一个控制cmd脚本,一个小的简单脚本,它启动主cmd脚本.小控制脚本的目的是在主脚本或其任何子节点失败的情况下进行清理.这很容易实现:主脚本及其所有子代都有窗口标题,以唯一标识符开头.当控制脚本确定主脚本及其所有子节点应该已完成时,它使用任务列表来查找任何挂起进程的窗口,通过:

tasklist.exe/FI"WINDOWTITLE eq UniqueIdentifier*"

这在XP中都非常好用.现在输入Windows7 64位.这里,如果主.cmd脚本或任何其他.cmd shell窗口尝试通过它设置其窗口标题

title UniqueIdentifier Followed By Descriptive Text
Run Code Online (Sandbox Code Playgroud)

Windows7 64位请将其他文本添加到标题中(具体来说,"管理员:"或类似名称).不能依赖前置文本.所以现在我们想用

tasklist.exe /FI "WINDOWTITLE eq *UniqueIdentifier*"
Run Code Online (Sandbox Code Playgroud)

但是这个失败并显示错误消息"无法识别搜索过滤器".使用我们的UniqueIdentifier作为后期修复的路线不起作用:命令

tasklist.exe /FI "WINDOWTITLE eq *UniqueIdentifier"
Run Code Online (Sandbox Code Playgroud)

也导致相同的错误消息.似乎微软在过滤器中使用"通配符"的概念并不仅限于使用"*"作为终端字符.哎哟.

任何人都有工作吗?Pslist似乎不允许使用窗口标题进行过滤.

dbe*_*ham 30

您可以使用/ V选项在输出中包含窗口标题,然后将结果传递给FIND(或FINDSTR)以过滤结果.

tasklist /v | find "UniqueIdentifier"
tasklist /v | findstr /c:"UniqueIdentifier"
Run Code Online (Sandbox Code Playgroud)

如果使用FINDSTR,那么我建议使用/ C选项,以便您可以在搜索字符串中包含空格.

/I如果需要进行不区分大小写的搜索,可能需要使用该选项.


Hen*_*nke 7

*是的,如果位于搜索的进程名称的末尾,则效果很好,如下面的答案
所示 。 以下是如何运行该命令的示例:

tasklist /FI "IMAGENAME eq no*"
Run Code Online (Sandbox Code Playgroud)


小智 5

根据我的实验,taskkill 的通配符似乎只在字符串的末尾起作用,而不是在任何其他位置。我无法以某种方式从 Microsoft 找到任何有关此问题的文档。然而,文档中的所有示例都遵循这种格式

Successful:  notepad*
Fails: notepad*.exe
Fails *notepad*
Run Code Online (Sandbox Code Playgroud)

正如另一个答案中提到的,最好解析任务列表的输出以准确获取您想要的内容,而不是依赖于任务杀死的相当破坏的行为。