как в cmd получить список процессов с подстрокой
Здравствуйте,
интересует как в Windows 7 получить в консоли список процессов содержащий подстроку. Пробовал это: Код:
tasklist /FI "Имя образа eq *api*" Код:
Ошибка: Фильтр поиска не опознан. tasklist /FI "Имя образа eq avp.exe", то все прокатыает, но я заранее не знаю ни ID процесса, ни имя образа. Моя задача: найти через консоль все идентификаторы процессов, содержащие подстроку office и завершить их. |
Цитата:
Код:
for /f "tokens=2 delims=," %%a in ('tasklist/nh /fo csv^|find/i "office"') do taskkill/pid %%a |
Цитата:
Код:
wmic process where "name like '%%office%%'" call terminate |
Спасибо большое! :)
В общих чертах понятно, но есть вопросы по работе команды. Не совсем понятно с "tokens = 2". Подстрока в IN выводит список процессов без заголовка в таблицу, а потом с помощью конвейера передаются команде find, которая ищет подстроку без учета регистра. А дальше, чего то не понятно. Читал в for /? что-то не дошло. То есть мы выбираем из результата выполнения find только вторую подстроку, а строка разделена на запятые (delims = ,)? Потом записываем результат в переменную a и завершаем процесс. А как быть, если их много (результатов): то есть сдедующий процесс find ищет не с начала таблицы, а в нем что сохраняется типа offset, на котором find остановилась в прошлый раз? то есть он ищет на следующем шаге цикла не с начала таблицы, а с места предыдцщего результата поиска? Или он убил процесс, а потом заново в новой таблице ищем и поэтому находим не тот же самый процесс, а уже другой? И еще простой вопрос: а где указано условие завершения цикла, я просто не эксперт в написании скпиртов, писал на с++, там понятно for (инициализация, проверка условия, что делать на следующем шаге) {тело цикла}, а тут как то по-другому. Или если find не найдет ничего, то он выдаст false и все закончится? |
VictorSh, всё гораздо проще: "FOR /F" построчно перебирает результат команды в скобках: TASKLIST + FIND (который работает как фильтр строк по условию вхождения заданной подстроки), каждую строку делит на токены по символу "," , берет 2-й токен (PID, соответствует %a) и выполняет для каждой строки команду "TASKKILL /PID %a"
|
спасибо)
Цитата:
Это похоже это аналог цикла PHP foreach для перебора всех элементов массива. |
VictorSh, на самом деле это цикл чтения файла (pipe) вплоть до EOF
Код:
while((c=_fgetchar()) != EOF) |
Цитата:
Цитата:
Цитата:
|
Теперь кажется все понял :) Спасибо большое, просветили! Тема решена.
|
Время: 16:58. |
Время: 16:58.
© OSzone.net 2001-