Передача 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
и убей их. Что я делаю неправильно?
1 ответ
Вам нужно сделать пару изменений, чтобы это заработало. Этот пример, как вы хотите:
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 нет и того, и другого.
- Ваш набор (строка в скобках) должен быть очерчен с помощью обратных кавычек (директива usebackq). В вашем наборе отсутствует последняя обратная цитата.
- Символ | или 'pipe' зарезервирован. Вы должны избежать этого с символом ^.
- Набор регулярных выражений, который вы передаете Findstr.exe, дал мне непредвиденные результаты. Я решил это, убрав.exe и дав команду Findstr.exe искать мою строку в начале потока по каналу. Ограниченные таким образом, мои результаты не включали такие программы, как rundll32.exe, который включал ваш набор.
Вы можете найти несколько превосходных примеров сценариев на сайтах Роба Вандервуде и Тимо Салми: