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