14

I ran the following command on the windows command prompt

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

The output of which is

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

I need to extract only one field, the PID, i.e. the number 6164 from the above output.

How do I achieve this ? More generally, how do I extract a subset(1/more) of the fields from the output of a command on the windows command line ?

ROMANIA_engineer
  • 54,432
  • 29
  • 203
  • 199
ashish makani
  • 153
  • 1
  • 1
  • 8

3 Answers3

15

Similar to previous answers, but uses specific switches in tasklist to skip header and behave correctly irrespective of spaces in image names:

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

(as run directly from cmd line, if run from batch replace %F with %%F

wmz
  • 3,645
  • 1
  • 14
  • 22
  • All 3 answers work for me, but i dont understand them :( Can someone explain their code fragment or point me to documentation for 'for /f' , 'tokens', 'delims' – ashish makani Nov 23 '12 at 05:53
  • Run `'command'` in parens, then for each line of it's output: tokenize (the line) with comma being delimiter and put a second token into %variable (`%F`) and then run `echo` with a given variable value (sans quotes, that's what tilde is for). For more general explanation on `for` syntax (including `for /f`) simply do `help for` at command line – wmz Nov 23 '12 at 16:13
  • @ashishmakani here is the documentation: https://ss64.com/nt/for_f.html – Zeeshan Dec 29 '17 at 04:15
10

the easiest way is with using WMIC:

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

EDIT: As the WMIC is not part of home editions of windows:

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

Here is used CMD of the caption.You can change it in the find and tasklist parameters. If this used in batch file you'll need %%B and %%A

npocmaka
  • 55,367
  • 18
  • 148
  • 187
3

You can use wmic command to not filter the output:

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

UPDATE: Another way:

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

PS: Remember you need to set right the tokens if the app filename contain spaces.

ElektroStudios
  • 19,105
  • 33
  • 200
  • 417