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.
¿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
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