13

我在 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/更多)?

4

3 回答 3

14

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

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

(直接从 cmd 行运行,如果从批量替换%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 回答