プロセスIDがわかっているとします。 Windowsバッチスクリプトを使用して、IDでプロセス名を見つけたい。これどうやってするの?
基本的なものは、タスクリストに出力をフィルタリングし、指定されたプロセスID情報のみを表示するように依頼します
tasklist /fi "pid eq 4444"
プロセス名のみを取得するには、行を分割する必要があります
for /f "delims=," %%a in ('
tasklist /fi "pid eq 4444" /nh /fo:csv
') do echo %%~a
この場合、プロセスのリストはcsv形式(/nh
)のヘッダー(/fo:csv
)なしで取得されます。カンマはトークンの区切り文字として使用され、行の最初のトークンはイメージ名です
注:一部のWindowsバージョン(私の場合は、スペイン語Windows XPバージョンです)では、タスクリストのpidフィルターが機能しません。この場合、プロセスのリストに対するフィルターはコマンドから実行する必要があります
for /f "delims=," %%a in ('
tasklist /fo:csv /nh ^| findstr /b /r /c:"[^,]*,\"4444\","
') do echo %%~a
これにより、タスクリストが生成され、csv出力の2番目の列でプロセスIDを検索してフィルタリングされます。
編集済み:あるいは、OSをスペイン語に翻訳したチームによって作成されたものを想定できます。他のロケールで何が起こるかわかりません。
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を設定します。