操作系统:Windows XP,Windows 7 64bit。
我们有一些相当庞大的cmd脚本,用于某些日常构建过程。这些脚本产生许多其他(窗口式)进程。有一个控制cmd脚本,一个小的简单脚本,用于启动主cmd脚本。小型控制脚本的目的是在主脚本或其任何子代出现故障的情况下进行清理。这很容易实现:主脚本及其所有子级都有以唯一标识符开头的窗口标题。当控制脚本确定主脚本及其所有子级应该已经完成时,它使用任务列表通过以下方式查找任何挂起的进程的窗口:
tasklist.exe / FI“ WINDOWTITLE eq UniqueIdentifier *”
所有这些在XP中都非常有效。现在输入Windows7 64位。在这里,如果主.cmd脚本或任何其他.cmd shell窗口尝试通过以下方式设置其窗口标题
title UniqueIdentifier Followed By Descriptive Text
Windows7 64位请在标题之前添加其他文本(特别是“ Administrator:”或类似名称)。不能依靠前面的文字。所以现在我们要使用
tasklist.exe /FI "WINDOWTITLE eq *UniqueIdentifier*"
但此操作失败,并显示错误消息“无法识别搜索过滤器”。使用将UniqueIdentifier用作后缀的方法行不通:该命令
tasklist.exe /FI "WINDOWTITLE eq *UniqueIdentifier"
也导致相同的错误消息。看起来,Microsoft在过滤器中使用“通配符”的概念没有超出将“ *”作为终端字符的范围。哎哟。
任何人都可以工作吗? Pslist似乎不允许使用窗口标题进行过滤。
最佳答案
您可以使用/ V选项在输出中包括窗口标题,然后将结果通过管道传递给FIND(或FINDSTR)以过滤结果。
tasklist /v | find "UniqueIdentifier"
tasklist /v | findstr /c:"UniqueIdentifier"
如果使用FINDSTR,则建议使用/ C选项,以便可以在搜索字符串中包含空格。
如果需要执行不区分大小写的搜索,则可能要使用
/I
选项。
关于filter - 在tasklist.exe中过滤不带通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11746079/