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 "" УДАЛИТЬ

Отличная часть этого метода - вы быстро найдете способы собрать много информации, которую можно использовать для автоматизации.

Другие вопросы по тегам