按进程ID查找进程名称

时间:2014-11-30 08:29:18

标签: windows batch-file command-line cmd operating-system

假设我知道进程ID。我想使用Windows批处理脚本通过其ID找到进程名称。我怎么能这样做?

3 个答案:

答案 0 :(得分:66)

基本的,请求任务列表过滤其输出并仅显示指示的进程ID信息

tasklist /fi "pid eq 4444" 

要仅获取进程名称,必须拆分该行

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

在这种情况下,将以csv格式(/nh)检索没有标题(/fo:csv)的进程列表。逗号用作标记分隔符,行中的第一个标记是图像名称

note :在某些Windows版本中(其中一个是我的情况,是西班牙语windows xp版本),任务列表中的pid过滤器不起作用。在这种情况下,进程列表上的过滤器必须在命令

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

这将生成任务列表并过滤它,在csv输出的第二列中搜索进程ID。

已编辑:或者,您可以假设团队将操作系统翻译成西班牙语。我不知道其他语言环境会发生什么。

tasklist /fi "idp eq 4444" 

答案 1 :(得分:4)

仅使用“本机”Windows实用程序,请尝试以下操作,其中“516”是您希望其图像名称的进程ID:

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 Instrumentation命令行工具)并获取可执行文件的完整路径:

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 )

答案 2 :(得分:2)

@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以适合您的情况。