假设我知道进程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以适合您的情况。