ОС: Windows XP, Windows 7 64-битная.
У нас есть довольно здоровенные сценарии cmd, которые используются для некоторых ежедневных процессов сборки. Эти сценарии порождают множество других (оконных) процессов. Существует один управляющий скрипт cmd, небольшой простой скрипт, который запускает основной скрипт cmd. Целью небольшого управляющего сценария является очистка в ситуациях, когда основной сценарий или любой из его дочерних элементов терпят неудачу. Это достигается довольно легко: основной сценарий и все его дочерние элементы имеют заголовки окон, начинающиеся с уникального идентификатора. Когда управляющий сценарий определяет, что основной сценарий и все его дочерние элементы должны быть завершены, он использует список задач для поиска окон любых зависших процессов с помощью:
tasklist.exe /FI "WINDOWTITLE eq UniqueIdentifier*"
Все это прекрасно работало в XP. Теперь введите Windows7 64-бит. Здесь, если основной сценарий .cmd или любое другое окно оболочки .cmd пытается установить заголовок окна через
title UniqueIdentifier Followed By Descriptive Text
64-разрядная версия Windows7 любезно добавляет к заголовку другой текст (в частности, «Администратор:» или аналогичный). На предшествующий текст нельзя полагаться. Итак, теперь мы хотим использовать
tasklist.exe /FI "WINDOWTITLE eq *UniqueIdentifier*"
но ЭТО НЕ ПРОДАЕТСЯ с сообщением об ошибке "Поисковой фильтр не может быть распознан". Идти по пути использования нашего UniqueIdentifier в качестве постфикса не получится: команда
tasklist.exe /FI "WINDOWTITLE eq *UniqueIdentifier"
также приводит к тому же сообщению об ошибке. Кажется, что понятие Microsoft «подстановочный знак» в фильтре не выходит за рамки наличия «*» в качестве конечного символа. Ой.
У КОГО-ТО ЕСТЬ КАКИЕ-ЛИБО РЕШЕНИЯ? Pslist, похоже, не позволяет фильтровать по заголовку окна.