Как извлечь конкретное поле из вывода списка задач в командной строке 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?
Ответы
Ответ 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: Помните, что вам нужно установить права на токены, если имя файла приложения содержит пробелы.