Me preguntaba cómo se podría obtener el NOMBRE de un archivo si uno tiene el PID del proceso en ejecución.
Decir si tengo 2 archivos de texto notepad.exe ejecutándose consecutivamente y ejecuto en la línea de comandos (código cortesía de: https://stackoverflow.com/questions/13507902/how-to-extract-a-specific-field-from-output-of-tasklist-on-the-windows-command-l ):
for /f "tokens=2 delims=," %F in ('tasklist /nh /fi "imagename eq notepad.exe" /fo csv') do @echo %~F
Me sale el resultado:
6624 7124
¿Qué nombre de archivo de texto es PID 6624? o ¿Qué nombre de archivo de texto es PID 7124?
diga que PID 6624 es 'findme1.txt' y PID 7124 es findme2.txt '
No sé cuál de los procesos PID para MATAR.
Podría matar el proceso equivocado y perder información vital ...
En otras palabras: cuál de los archivos findme * .txt anteriores es findme1.txt y ¿cuál de los archivos findme * .txt anteriores es findme2.txt?
Solo deseo matar findme1.txt y NO findme2.txt que contiene información vital del sistema, por ejemplo.
Cualquier sugerencia será muy bienvenida y apreciada por mí. Muchas gracias por adelantado.
fuente
"tokens=2,9 delims=,"
y lista de tareas con/v
parámetro detallado y luego… do @echo %~F:%~G
.Respuestas:
Lo que está buscando es el nombre del archivo en el que está trabajando cada proceso, si corresponde.
fondo
El problema es que el nombre del archivo en el que se está trabajando (a diferencia del nombre del archivo ejecutable) normalmente no se muestra en el resultado de la lista de tareas, o el resultado de cualquier otra herramienta de línea de comandos estándar que conozca.
Un proceso siempre tiene una lista interna de los archivos que tiene abiertos, estos están en el proceso "tabla de manejadores". Esto es visible en, por ejemplo. Explorador de procesos, pero desea una herramienta de línea de comandos. Y no hay una forma general de saber, entre todos los archivos que un proceso tiene abierto, cuál es el documento que el proceso está abierto para editar.
Sin embargo. Algunas aplicaciones, incluidos el Bloc de notas, el conjunto de aplicaciones de Office y muchas otras, establecen el nombre del archivo en el título de su ventana. p.ej. "Notepad file1.txt" Esto no es consistente de una aplicación a otra. Una aplicación puede establecer su título de Windows a lo que quiera. Un programa podría, por ejemplo, poner su propio nombre primero y luego el nombre del archivo. Lo que sea.
Por lo tanto, desea mirar los títulos de las ventanas. El Administrador de tareas puede mostrar los títulos de las ventanas, pero usted desea una herramienta de línea de comandos. Como señala JosefZ, tasklist / v puede hacer esto. (También hay un pequeño programa llamado tlist que lo hará. Viene con el paquete de herramientas de depuración de Windows.) Sin embargo, estos le mostrarán, además de los procesos que desea, una gran cantidad de procesos que no tienen nombres de ventanas. .
responder
¡PowerShell al rescate! Intente esto en su símbolo del sistema: (No tiene que estar en c: \, es solo un ejemplo)
Esto mostrará una lista de todos los procesos que tienen un título de ventana no vacía.
Si solo quieres ver los procesos que ejecutan un programa en particular, como el bloc de notas, puedes poner ese nombre antes de la primera canalización, así:
Esto filtra la salida de get-Process antes de que llegue al resto de los comandos. El comando where-Object filtra los títulos de las ventanas que no están vacíos, y la tabla de formato simplemente coloca el resultado en una tabla ordenada.
Ahora, hagámoslo más fácil. Coloque lo siguiente en un archivo .cmd, digamos que lo llama wn.cmd (wn para windowname). Ponga wn.cmd en algún directorio que esté en su ruta. (Siempre creo un directorio llamado c: \ progs y lo agrego a mi ruta, para pequeñas cosas como esta. También coloco las herramientas de sysinternals en ese directorio).
ejemplos
Ahora, en el símbolo del sistema ... asumiendo que wn.cmd está en algún lugar de su ruta ... puede simplemente escribir
y obtendrás la lista completa de procesos con ventanas nombradas ... así:
y si escribe por ejemplo
obtienes solo los que están ejecutando el bloc de notas:
(Esta selección va por el nombre del ejecutable, no por el título de la ventana).
Crédito a quien crédito merece: Encontré el "script" original de powershell para listar procesos con ventanas con nombre de esta página en powershell.com . Empaquetarlo en un archivo .cmd hace que sea más fácil de usar.
fuente