Найти имя процесса по его идентификатору процесса

Предположим, что я знаю идентификатор процесса. Я хочу найти имя процесса по его идентификатору, используя оконный пакетный скрипт. Как я могу это сделать?

Ответы

Ответ 1

Основной, попросите список задач фильтровать свой вывод и отображать только указанную идентификационную информацию процесса

tasklist /fi "pid eq 4444" 

Чтобы получить имя процесса, линия должна быть разделена

for /f "delims=," %%a in ('
    tasklist /fi "pid eq 4444" /nh /fo:csv
') do echo %%~a

В этом случае список процессов извлекается без заголовков (/nh) в формате csv (/fo:csv). В качестве разделителей токенов используются запятые, а первый токен в строке - это имя изображения

Примечание. В некоторых версиях Windows (один из них, мой случай, является испанской версией Windows xp), фильтр pid в списке задач не работает. В этом случае фильтр по списку процессов должен выполняться вне команды

for /f "delims=," %%a in ('
    tasklist /fo:csv /nh ^| findstr /b /r /c:"[^,]*,\"4444\","
') do echo %%~a

Это сгенерирует список задач и отфильтровывает поиск идентификатора процесса во втором столбце выхода csv.

отредактирован: в качестве альтернативы вы можете предположить, что было сделано командой, которая перевела ОС на испанский. Я не знаю, что может случиться в других местах.

tasklist /fi "idp eq 4444" 

Ответ 2

Используя только "родные" утилиты Windows, попробуйте следующее: "516" - это идентификатор процесса, для которого требуется имя изображения:

for /f "delims=," %a in ( 'tasklist /fi "PID eq 516" /nh /fo:csv' ) do ( echo %~a )
for /f %a in ( 'tasklist /fi "PID eq 516" ^| findstr "516"' ) do ( echo %a )

Или вы можете использовать wmic (инструмент командной строки инструментария Windows Management Tool) и получить полный путь к исполняемому файлу:

wmic process where processId=516 get name
wmic process where processId=516 get ExecutablePath

Или вы можете загрузить Microsoft PsTools или, в частности, загрузить только утилиту pslist и использовать PsList:

for /f %a in ( 'pslist 516 ^| findstr "516"' ) do ( echo %a )

Ответ 3

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET /a pid=1600
FOR /f "skip=3delims=" %%a IN ('tasklist') DO (
 SET "found=%%a"
 SET /a foundpid=!found:~26,8!
 IF %pid%==!foundpid! echo found %pid%=!found:~0,24%!
)

GOTO :EOF

... установите PID в соответствии с вашими обстоятельствами.