假设我知道进程ID。我想使用Windows批处理脚本通过其ID查找进程名称。我怎样才能做到这一点?
假设我知道进程ID。我想使用Windows批处理脚本通过其ID查找进程名称。我怎样才能做到这一点?
Answers:
基本的一种,要求任务列表过滤其输出,仅显示指示的进程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"
仅使用“本机” 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 )
find
命令可以检索与内存列中的数据匹配的错误行。tasklist
wmic
pslist
1.500
在内存列中)。在任务列表中,您可以过滤输出(/fi
),在wmic中,您可以过滤输出(where
子句),在pslist中,您可以过滤输出(给pid
in命令行)。虽然这grep
是个很棒的工具,但无需在这里使用