13

Windowsコマンドプロンプトで次のコマンドを実行しました

C:>tasklist /fi "Imagename eq BitTorrent.exe"

その出力は

Image Name            PID      Session Name       Session #    Mem Usage
==================  ======== =================   ===========   =========
BitTorrent.exe        6164      Console                   3     24,144K

上記の出力から、1 つのフィールド (PID、つまり数値 6164) のみを抽出する必要があります。

どうすればこれを達成できますか? より一般的には、Windows コマンド ラインのコマンドの出力からフィールドのサブセット (1 つ以上) を抽出するにはどうすればよいですか?

4

3 に答える 3

14

以前の回答と同様ですが、特定のスイッチを使用しtasklistてヘッダーをスキップし、画像名のスペースに関係なく正しく動作します。

for /f "tokens=2 delims=," %F in ('tasklist /nh /fi "imagename eq BitTorrent.exe" /fo csv') do @echo %~F

(コマンドラインから直接実行する場合、バッチから実行する場合%F%%F

于 2012-11-22T16:33:53.987 に答える
9

最も簡単な方法は、WMIC を使用することです。

c:\>wmic process where caption="BitTorrent.exe" get  ProcessId

編集: WMIC は Windows のホームエディションの一部ではないため:

for /f "tokens=1,2 delims= " %A in ('tasklist /fi ^"Imagename eq cmd.exe^" ^| find ^"cmd^"') do echo %B

ここでは、キャプションの CMD を使用します。find および tasklist パラメーターで変更できます。これをバッチファイルで使用する場合は%%B%%A

于 2012-11-22T08:13:31.007 に答える
3

wmic コマンドを使用して、出力をフィルタリングしないようにすることができます。

wmic process where name="BitTorrent.exe" get processid | MORE +1

更新: 別の方法:

@Echo OFF
FOR /F "tokens=2" %%# in ('tasklist /fi "Imagename eq winamp.exe" ^| MORE +3') do (Echo %%#)
Pause&Exit

PS: アプリのファイル名にスペースが含まれている場合は、トークンを正しく設定する必要があることに注意してください。

于 2012-11-22T09:37:54.107 に答える