2012-03-15 25 views
5

Estoy intentando que los procesos de Windows coincidan con ciertos criterios, p. son como "123456.exe" y tratan de matarlos con la lista de tareas. Estoy tratando de hacerlo así:Transmitir PID de la lista de tareas y eliminar procesos con la lista de tareas

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

que no está bien y no sé por qué .... ¿Puede alguien darme una pista? ¡Gracias por adelantado!

Respuesta

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

varios cambios:

  • El command_to_process necesita volver comillas ('') a ambos lados de la orden.
  • Las tuberías ("|") dentro del comando_a_proceso deben escaparse con un símbolo de intercalación ("^").
  • Su comando findstr coincidirá con todos los procesos que tienen un dígito antes del ".exe". Por ejemplo, "myapp4.exe" también habría sido eliminado. La versión que proporciono coincidirá con nombres de procesos que contienen únicamente números.
  • La opción "skip = 2" omitirá las dos primeras líneas de salida de findstr, no de la lista de tareas. Dado que la expresión regular no coincidirá con nada en las dos primeras líneas de salida de la lista de tareas, puede quitar la opción de omisión.

Por cierto, si se coloca este comando en un archivo por lotes, recuerde utilizar "%% i" en lugar de "% i" para sus parámetros, o se obtendrá un mensaje de error como i was unexpected at this time.

+0

¿Cuál sería el cambio en el comando anterior si quiero matar sólo el primer PID ¿en la lista? es decir, si tengo 2 notepad.exe abierto, quiero matar solo el primer pid en la lista. – Jai

+0

No importa, descubrí la salsa secreta. setlocal enabledelayedexpansion set flag = 0 FOR/F "usebackq tokens = 2" %% i IN ('tasklist^| findstr/r/b" notepad.exe "') DO ( if! flag! == 0 ( eco! bandera! \t taskkill/pid %% i \t bandera del set = 1 \t eco! bandera! ) ) endlocal – Jai

1

Si la diferencia de los procesos de nombre no es muy complejo, por ejemplo, si el nombre es siempre el mismo puede utilizar la opción/FI de taskkill directamente

taskkill /FI "IMAGENAME eq your_image_name_here.exe" 

==>taskkill documentation

Cuestiones relacionadas