我在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个/更多)?
答案 0 :(得分:14)
与之前的答案类似,但使用tasklist
中的特定开关来跳过标题并且无论图像名称中的空格如何都能正常运行:
for /f "tokens=2 delims=," %F in ('tasklist /nh /fi "imagename eq BitTorrent.exe" /fo csv') do @echo %~F
(直接从cmd行运行,如果从批量替换%F
运行%%F
答案 1 :(得分: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
答案 2 :(得分: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:请记住,如果应用程序文件名包含空格,则需要设置权限。