Подтвердить что ты не робот

Как извлечь конкретное поле из вывода списка задач в командной строке Windows

Я запустил следующую команду в командной строке Windows

C:>tasklist /fi "Imagename eq BitTorrent.exe"

Выход которого

Image Name            PID      Session Name       Session #    Mem Usage
==================  ======== =================   ===========   =========
BitTorrent.exe        6164      Console                   3     24,144K

Мне нужно извлечь только одно поле, PID, то есть число 6164 из указанного выше выхода.

Как мне это достичь? Как правило, как извлечь подмножество (1/больше) полей из вывода команды в командной строке Windows?

4b9b3361

Ответ 1

Как и в предыдущих ответах, но использует специальные ключи в tasklist, чтобы пропускать заголовок и вести себя корректно независимо от пробелов в именах изображений:

for /f "tokens=2 delims=," %F in ('tasklist /nh /fi "imagename eq BitTorrent.exe" /fo csv') do @echo %~F

(как выполняется непосредственно из строки cmd, если запустить из пакетной замены %F с помощью %%F

Ответ 2

Самый простой способ - использовать WMIC:

c:\>wmic process where caption="BitTorrent.exe" get  ProcessId

EDIT: Поскольку WMIC не является частью home выпусков окон:

for /f "tokens=1,2 delims= " %A in ('tasklist /fi ^"Imagename eq cmd.exe^" ^| find ^"cmd^"') do echo %B

Здесь используется CMD заголовка. Вы можете изменить его в параметрах find и tasklist. Если это используется в пакетном файле, вам понадобятся %%B и %%A

Ответ 3

Вы можете использовать команду wmic, чтобы не фильтровать вывод:

wmic process where name="BitTorrent.exe" get processid | MORE +1

ОБНОВЛЕНИЕ: Другой способ:

@Echo OFF
FOR /F "tokens=2" %%# in ('tasklist /fi "Imagename eq winamp.exe" ^| MORE +3') do (Echo %%#)
Pause&Exit

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