通过进程ID查找进程名称

假设我知道进程ID。 我想通过它的IDfind进程名称,使用Windows批处理脚本。 我怎样才能做到这一点?

基本的,请求tasklist过滤它的输出,并且只显示指示的进程ID信息

tasklist /fi "pid eq 4444" 

为了只获取进程名称,该行必须被分割

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

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

注意 :在一些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" 

只使用“本机”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 ) 
 @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以适合您的情况。