2012-11-22 7 views
11

Ho eseguito il seguente comando sulle finestre prompt dei comandiCome estrarre un campo specifico dall'uscita del tasklist sulla riga di comando di Windows

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

L'uscita del quale è

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

ho bisogno di estrai solo un campo, il PID, ovvero il numero 6164 dall'output precedente.

Come ottengo questo? Più in generale, come faccio a estrarre un sottoinsieme (1/più) dei campi dall'output di un comando sulla riga di comando di Windows?

risposta

7

il modo più semplice è con l'utilizzo di WMIC:

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

EDIT: Come il WMIC non fa parte della casa edizioni di Windows:

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

Qui viene usato CMD della didascalia. Puoi cambiarlo nei parametri find e tasklist. Se questo era nel file batch è necessario %%B e %%A

+2

non posso installare nulla sulla macchina e devono utilizzare le finestre standard di installazione –

+0

wmic è un comando standard per windows.Except casa edizioni ... io aggiungo altri approches nella mia risposta comunque – npocmaka

+0

PS:.. Ricordati è necessario impostare righ t i token se il nome file dell'app contiene spazi. – ElektroStudios

3

È possibile utilizzare il comando wmic di non filtrare l'output:

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

AGGIORNAMENTO: Un altro modo:

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

PS: Ricorda che devi impostare i token correttamente se il nome file dell'app contiene spazi.

13

simili risposte precedenti, ma utilizza interruttori specifici in tasklist saltare intestazione e comportarsi correttamente indipendentemente spazi nei nomi immagine:

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

(come fuga direttamente dalla linea cmd, se eseguito da lotto sostituiscono %F con %%F

+0

Tutte e 3 le risposte funzionano per me, ma non le capisco :( Qualcuno può spiegare il loro frammento di codice o indicarmi la documentazione per "for/f", "token", "delimita" –

+0

Esegui "command" in parens , quindi per ogni riga di output: tokenize (la riga) con delimitatore di virgola e mettere un secondo token in% variable ('% F') e quindi eseguire' echo' con un valore di variabile dato (sans quotes, that is what tilde è per).Per una spiegazione più generale sulla sintassi 'for' (tra cui' for/f') è sufficiente 'help for' alla riga di comando – wmz

+0

Grazie a una tonnellata @wmz –

Problemi correlati