Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] как в cmd получить список процессов с подстрокой

Ответить
Настройки темы
CMD/BAT - [решено] как в cmd получить список процессов с подстрокой

Ветеран


Сообщения: 526
Благодарности: 27

Профиль | Отправить PM | Цитировать


Здравствуйте,

интересует как в Windows 7 получить в консоли список процессов содержащий подстроку.

Пробовал это:
Код: Выделить весь код
tasklist /FI "Имя образа eq *api*"
но получается:
Код: Выделить весь код
Ошибка: Фильтр поиска не опознан.
Однако, если явно указать:
tasklist /FI "Имя образа eq avp.exe", то все прокатыает, но я заранее не знаю ни ID процесса, ни имя образа.

Моя задача: найти через консоль все идентификаторы процессов, содержащие подстроку office и завершить их.

Отправлено: 11:42, 19-04-2011

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата VictorSh:
найти через консоль все идентификаторы процессов, содержащие подстроку office и завершить их »
Код: Выделить весь код
for /f "tokens=2 delims=," %%a in ('tasklist/nh /fo csv^|find/i "office"') do taskkill/pid %%a
P.S. для консоли заменить %%a -> %a
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:57, 19-04-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата VictorSh:
найти через консоль все идентификаторы процессов, содержащие подстроку office и завершить их »
вариант через WMI:
Код: Выделить весь код
wmic process where "name like '%%office%%'" call terminate
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:07, 19-04-2011 | #3


Ветеран


Сообщения: 526
Благодарности: 27

Профиль | Отправить PM | Цитировать


Спасибо большое!

В общих чертах понятно, но есть вопросы по работе команды.

Не совсем понятно с "tokens = 2".
Подстрока в IN выводит список процессов без заголовка в таблицу, а потом с помощью конвейера передаются команде find, которая ищет подстроку без учета регистра. А дальше, чего то не понятно. Читал в for /? что-то не дошло. То есть мы выбираем из результата выполнения find только вторую подстроку, а строка разделена на запятые (delims = ,)?
Потом записываем результат в переменную a и завершаем процесс.

А как быть, если их много (результатов): то есть сдедующий процесс find ищет не с начала таблицы, а в нем что сохраняется типа offset, на котором find остановилась в прошлый раз? то есть он ищет на следующем шаге цикла не с начала таблицы, а с места предыдцщего результата поиска?
Или он убил процесс, а потом заново в новой таблице ищем и поэтому находим не тот же самый процесс, а уже другой?

И еще простой вопрос: а где указано условие завершения цикла, я просто не эксперт в написании скпиртов, писал на с++, там понятно
for (инициализация, проверка условия, что делать на следующем шаге)
{тело цикла},
а тут как то по-другому. Или если find не найдет ничего, то он выдаст false и все закончится?

Последний раз редактировалось VictorSh, 19-04-2011 в 14:54.


Отправлено: 14:43, 19-04-2011 | #4


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


VictorSh, всё гораздо проще: "FOR /F" построчно перебирает результат команды в скобках: TASKLIST + FIND (который работает как фильтр строк по условию вхождения заданной подстроки), каждую строку делит на токены по символу "," , берет 2-й токен (PID, соответствует %a) и выполняет для каждой строки команду "TASKKILL /PID %a"
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:55, 19-04-2011 | #5


Ветеран


Сообщения: 526
Благодарности: 27

Профиль | Отправить PM | Цитировать


спасибо)

Цитата amel27:
"FOR /F" построчно перебирает результат команды в скобках »
То, есть FOR /F заранее знает, сколько будет шагов цикла? а потом натыкается на нуль-символ и заканчивает цикл.
Это похоже это аналог цикла PHP foreach для перебора всех элементов массива.

Последний раз редактировалось VictorSh, 19-04-2011 в 22:53.


Отправлено: 21:59, 19-04-2011 | #6


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


VictorSh, на самом деле это цикл чтения файла (pipe) вплоть до EOF
Код: Выделить весь код
while((c=_fgetchar()) != EOF)

Отправлено: 03:13, 20-04-2011 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата VictorSh:
То, есть FOR /F заранее знает, сколько будет шагов цикла? »
Не знает.
Цитата VictorSh:
а потом натыкается на нуль-символ и заканчивает цикл. »
Читает до конца файла, как уже написал amel27. Если встретит «\0x0» — верно, закончит чтение преждевременно (скорее всего потому, что командный процессор пользует C-шные функции и строки).
Цитата amel27:
…вплоть до EOF
Код: Выделить весь код
while((c=_fgetchar()) != EOF)
Я бы уточнил (на случай, если кто неправильно поймёт контекст), что именно до реального конца файла, «for /f» не рассматривает символ «\0x1a» в качестве конца файла (т.е., EOF, в примере выше, != \0x1a). И, скорее, что-то наподобие fgets(), нежели _fgetchar().

Отправлено: 04:57, 20-04-2011 | #8


Ветеран


Сообщения: 526
Благодарности: 27

Профиль | Отправить PM | Цитировать


Теперь кажется все понял Спасибо большое, просветили! Тема решена.

Отправлено: 12:09, 20-04-2011 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] как в cmd получить список процессов с подстрокой

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Как получить список пользователей Vagac AutoIt 2 06-11-2009 12:24
[решено] Как выгрузить список процессов в файл: Bugs Microsoft Windows NT/2000/2003 3 08-03-2008 19:53
Как получить список пользователей AD? Evgeniy15 Microsoft Windows NT/2000/2003 10 09-04-2007 18:03
Удаленно получить список процессов Dronec Сетевые технологии 1 25-09-2004 12:49
Удаленно получить список процессов Dronec Защита компьютерных систем 4 24-09-2004 14:41




 
Переход