taskkill - завершать задачи заголовками окон, заканчивающимися определенной строкой
Мне нужно написать пакетную программу, чтобы завершить все задачи коммуникатора MS Office заголовками окон (обычно заканчивающимися шаблоном "- Разговор").
Я старался
taskkill /FI "WINDOWTITLE eq *Conversation" /IM communator.exe
но шаблон подстановки, начинающийся с '*', похоже, не работает. Выдает следующую ошибку
ОШИБКА: фильтр поиска не может быть распознан.
Любые предложения для обходного пути будет принята с благодарностью!
2 ответа
Вот пакетный файл, частично вдохновленный этим вопросом Рожье:
@echo off
for /F "delims=" %%a in ('tasklist /fo list /v') do (
call :Sub %%a
)
exit /b
:Sub
set Line=%*
set BOL4=%Line:~0,4%
set BOL13=%Line:~0,13%
set Value=%Line:~14%
if "%BOL4%"=="PID:" (
set save_PID=%Value%
exit /b
)
if "%BOL13%"=="Window Title:" (
// Примечание . ниже.echo %Value% | findstr /r /c:"- Conversation.$" > nul
if not errorlevel 1 (
echo %save_PID%
REM taskkill /pid %save_PID%
)
exit /b
)
exit /b
Я обнаружил, что мне нужно добавить .
в конце регулярного выражения для
echo
строка| findstr /r
регулярное выражение, заканчивающееся $
Форма для работы. Я предполагаю, что echo
добавляет CR или, возможно, дополнительный CRLF к строке, и это findstr
считает это как символ, встречающийся между строкой и концом строки.
Очевидно, вы откомментируете taskkill
командуй тем, что проверил.
Я действительно ценю ответ Batch-файла, который использует команду FOR.
Вот еще один метод, представленный здесь просто как дополнительная опция. Подход несколько отличается от другого ответа, который предоставляется.
Во-первых, посмотрите, сможете ли вы найти процессы MS Communicator с помощью WMIC. например:
СПИСОК ПРОЦЕССОВ WMIC ПОЛНЫЙ
Или для отображения информации в таблице по горизонтали, а не по вертикали в формате "свойство = значение", выполните:
СПИСОК ПРОЦЕССОВ WMIC ПОЛНЫЙ / ФОРМАТ: ТАБЛИЦА
или, возможно, чтобы ограничить это:
WMIC PROCESS GET NAME /FORMAT:TABLE
(и игнорировать первую строку)
Кажется, что это не показывает заголовок окна, но может показывать много другой информации, которая может быть использована для уникальной идентификации экземпляров Communicator, например, имен исполняемых файлов.
Затем вы можете стать более агрессивными, сузив свои выводы. Следующее ищет экземпляры, которые заканчиваются на "name.exe" (например, "filename.exe", "myname.exe")
WMIC PROCESS WHERE "Описание типа" %%name.exe "" СПИСОК ПОЛНЫЙ / ФОРМАТ: ТАБЛИЦА
Все это было просто исследование, чтобы настроить вашу команду. (В конце концов, вы не хотите начинать прерывать неправильные процессы.)
Наконец, как только все ваши исследования завершены, вы знаете, что можете перечислить только то, что хотите прекратить, и начать убивать.
WMIC PROCESS WHERE "Описание типа" %%name.exe "" УДАЛИТЬ
Отличная часть этого метода - вы быстро найдете способы собрать много информации, которую можно использовать для автоматизации.