Передача PID из списка задач и уничтожение процессов с помощью списка задач - PullRequest
5 голосов
/ 15 марта 2012

Я пытаюсь получить процессы Windows, соответствующие некоторым определенным критериям, например, они похожи на «123456.exe», и пытаюсь уничтожить их с помощью списка задач.Я пытаюсь сделать это так:

FOR /F "usebackq tokens=2 skip=2" %i IN (`tasklist |findstr /r "[0-9].exe") DO taskkill /PID %i

, что неправильно, и я не знаю почему .... Кто-нибудь может дать мне подсказку?Спасибо заранее!

Ответы [ 2 ]

11 голосов
/ 15 марта 2012
FOR /F "usebackq tokens=2" %i IN (`tasklist ^| findstr /r /b "[0-9][0-9]*[.]exe"`) DO taskkill /pid %i

Несколько изменений:

  • Для command_to_process нужны обратные кавычки (``) с обеих сторон команды.
  • Каналы ("|") внутри command_to_process должны быть экранированы с помощью каретки ("^").
  • Ваша команда findstr будет соответствовать всем процессам, которые имеют цифру перед ".exe". Например, «myapp4.exe» также был бы убит. Предоставленная мною версия будет соответствовать именам процессов, содержащим только цифры.
  • Опция "skip = 2" пропустит первые две строки, выведенные из findstr, а не из списка задач. Поскольку регулярное выражение не будет совпадать с чем-либо в первых двух строках, выводимых из списка задач, вы можете удалить опцию пропуска.

Кстати, если вы поместите эту команду в пакетный скрипт, не забудьте использовать «%% i» вместо «% i» для ваших параметров, иначе вы получите сообщение об ошибке типа i was unexpected at this time.

1 голос
/ 12 марта 2017

Если разница в именах процессов не очень сложна, например, если имя всегда одно и то же, вы можете напрямую использовать параметр / FI для TaskKill

taskkill /FI "IMAGENAME eq your_image_name_here.exe"

==> документация TaskKill

...