Rechercher le nom du processus par son ID de processus

Supposons que je connaisse l’identifiant du processus. Je veux trouver le nom du processus par son identifiant, en utilisant un script de commandes Windows. Comment puis-je faire ceci?

La base, demandez à la liste des tâches de filtrer sa sortie et d’afficher uniquement les informations d’identification du processus indiquées

tasklist /fi "pid eq 4444" 

Pour obtenir uniquement le nom du processus, la ligne doit être fractionnée

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

Dans ce cas, la liste des processus est extraite sans en-têtes ( /nh ) au format csv ( /fo:csv ). Les virgules sont utilisées comme délimiteurs de jetons et le premier jeton de la ligne est le nom de l’image

note : Dans certaines versions de Windows (l’une d’entre elles, la version espagnole de Windows xp), le filtre PID de la liste des tâches ne fonctionne pas. Dans ce cas, le filtre sur la liste des processus doit être effectué en dehors de la commande

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

Cela va générer la liste des tâches et la filtrer en recherchant l’identifiant du processus dans la deuxième colonne de la sortie csv.

édité : alternativement, vous pouvez supposer ce qui a été fait par l’équipe qui a traduit l’OS en espagnol. Je ne sais pas ce qui peut arriver dans d’autres lieux.

 tasklist /fi "idp eq 4444" 

En utilisant uniquement des utilitaires Windows “natifs”, essayez ce qui suit, où “516” est l’ID de processus pour lequel vous souhaitez que le nom de l’image:

 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 ) 

Ou vous pouvez utiliser wmic (l’outil de ligne de commande de Windows Management Instrumentation) et obtenir le chemin d’access complet à l’exécutable:

 wmic process where processId=516 get name wmic process where processId=516 get ExecutablePath 

Ou vous pouvez télécharger Microsoft PsTools , ou simplement télécharger l’utilitaire pslist, et utiliser 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 

… définissez le PID en fonction de votre situation.