操作系统: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
Windows7 64 位在标题前添加其他文本(特别是“管理员:”或类似名称)。不能依赖前面的文本。所以现在我们要使用
tasklist.exe /FI "WINDOWTITLE eq *UniqueIdentifier*"
但这会失败,并显示错误消息“无法识别搜索过滤器”。使用我们的 UniqueIdentifier 作为后缀是行不通的:命令
tasklist.exe /FI "WINDOWTITLE eq *UniqueIdentifier"
也会导致相同的错误消息。似乎微软在过滤器中的“通配符”概念并没有超出将“*”作为终端字符的范围。哎哟。
有人有任何解决方法吗?Pslist 似乎不允许使用窗口标题进行过滤。