Назад | Перейти на главную страницу

Передача PID из списка задач и завершение процессов с помощью списка задач

Это относится к моей теме Передайте PID из списка задач в taskkill, чтобы убить процесс с помощью .dll, которые он держит открытыми.

Я пытаюсь сделать что-то вроде того, что обсуждалось в этой ветке:

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

Вышеупомянутая команда не запускается. Я хочу получить все процессы, похожие на 123456.exe и убить их. Что я делаю не так?

Вам нужно будет внести пару изменений, чтобы он заработал. Этот пример как хотите:

FOR /F "usebackq tokens=1-2" %i IN (`tasklist ^|findstr /b "[0-9]"`) DO taskkill /PID %j

Ваш код:

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

Почему ваш код не работал:

  • Во время выполнения директива skip = 2 пропустит ваши первые два результата.
  • Вывод Tasklist.exe состоит из нескольких столбцов. Findstr.exe работает с первым столбцом, а Taskkill.exe использует второй. Без их включения у Taskkill.exe нет pid-идентификатора.
  • Ваш набор (строка в круглых скобках) должен быть выделен обратными кавычками (директива usebackq). В вашем наборе отсутствует последняя обратная цитата.
  • Символ | или "вертикальная черта" зарезервирован. Вы должны экранировать его с помощью символа ^.
  • Набор регулярных выражений, который вы передаете Findstr.exe, вернул мне непредвиденные результаты. Я решил это, удалив .exe и указав Findstr.exe искать мою строку в начале конвейерного потока. Ограниченные таким образом, мои результаты не включали такие программы, как rundll32.exe, которые были в вашем наборе.

Вы можете найти несколько отличных примеров сценариев на сайтах Роба Вандервуде и Тимо Салми: