通过其进程ID查找进程名称[关闭]


Answers:


96

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

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输出的第二列中搜索进程ID。

编辑:或者,您可以假设将操作系统翻译为西班牙语的团队所做的工作。我不知道在其他地区会发生什么。

tasklist /fi "idp eq 4444" 

有没有办法单独获得所有进程和PID?我们可以在linux中完成,但是不确定dos命令。请帮忙。
arunpandiyarajhen

6

仅使用“本机” 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管理规范命令行工具)并获取可执行文件的完整路径:

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 )

如果进程ID小于1000,则在或数字列中的任何数字列中为或(小于或大于1000)时,该find命令可以检索与内存列中的数据匹配的错误行。tasklistwmicpslist
MC ND 2014年

添加尾部空间不能解决问题(例如:1.500在内存列中)。在任务列表中,您可以过滤输出(/fi),在wmic中,您可以过滤输出(where子句),在pslist中,您可以过滤输出(给pidin命令行)。虽然这grep是个很棒的工具,但无需在这里使用
MC ND 2014年

1
好,打个好电话。让我为此努力... ;-)
Craig

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.