如何在windows命令行中从tasklist的输出中提取特定的字段

我在Windows命令提示符下运行以下命令

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

其输出是

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

我只需要提取一个字段,即PID,即上述输出中的数字6164。

我如何做到这一点? 更一般地说,如何从windows命令行的命令输出中提取一个子集(1 /多个)的字段?

与以前的答案类似,但在tasklist使用特定的开关来跳过标题并正确运行,而不考虑图像名称中的空格:

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

(如直接从cmd行运行,如果从批处理运行%F使用%%F

最简单的方法是使用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

您可以使用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:记住,如果应用程序文件名包含空格,则需要设置令牌。