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