2012-03-15 6 views
5

Sto cercando di ottenere processi Windows corrispondenti ad alcuni criteri, ad es. sono come "123456.exe" e cercano di ucciderli con la lista di attività. Io sto cercando di fare in quel modo:Passare PID dall'elenco attività e processi di eliminazione con l'elenco attività

FOR /F "usebackq tokens=2 skip=2" %i IN (`tasklist |findstr /r "[0-9].exe") DO taskkill /PID %i 

che non è giusto e io non so perché .... Qualcuno può darmi un suggerimento? Grazie in anticipo!

risposta

11
FOR /F "usebackq tokens=2" %i IN (`tasklist ^| findstr /r /b "[0-9][0-9]*[.]exe"`) DO taskkill /pid %i 

diversi cambiamenti:

  • Il command_to_process esigenze Ritorna virgolette (``) su entrambi i lati del comando.
  • I pipe ("|") all'interno del comando_to_processo devono essere sottoposti a escape con un segno di omissione ("^").
  • Il comando findstr corrisponde a tutti i processi che hanno una cifra prima di ".exe". Ad esempio, "myapp4.exe" sarebbe stato anche ucciso. La versione che fornisco corrisponderà ai nomi dei processi contenenti esclusivamente numeri.
  • L'opzione "skip = 2" salta le prime due righe di output da findstr, non da tasklist. Poiché l'espressione regolare non corrisponde a nulla nelle prime due righe dell'output, è possibile rimuovere l'opzione di salto.

A proposito, se si inserisce questo comando in uno script batch, ricordatevi di usare "%% i" invece di "% i" per i parametri, o si otterrà un messaggio di errore come i was unexpected at this time.

+0

Quale sarebbe la variazione del comando precedente, se voglio uccidere solo il primo pid nella lista? Ad esempio, se ho 2 notepad.exe aperti, voglio uccidere solo il primo pid nell'elenco. – Jai

+0

Non importa, ho capito la salsa segreta. setlocal enabledelayedexpansion set flag = 0 FOR/F "usebackq tokens = 2" %% i IN ('tasklist^| findstr/r/b" notepad.exe "') DO ( if! flag! == 0 ( echo! bandiera! \t taskkill/pid %% i \t set flag = 1 \t eco! bandiera! ) ) endlocal – Jai

1

Se la differenza nome processi non è molto complesso, ad esempio, se il nome è sempre lo stesso è possibile utilizzare l'opzione/FI di taskkill direttamente

taskkill /FI "IMAGENAME eq your_image_name_here.exe" 

==>taskkill documentation

Problemi correlati