Tengo un archivo de proceso por lotes que cambia algunos archivos de registro y luego reinicia explorer.exe para que tengan efecto. Estoy usando los comandos
taskkill /f /im explorer.exe
explorer.exe
Esto por supuesto mata todos Los procesos de explorer.exe, incluidas las ventanas del explorador que tengo abiertas.
(Obviamente, estoy usando la opción de Launch folder windows in a separate process
.)
¿Hay alguna manera de que pueda determinar qué instancia de explorer.exe es la principal y simplemente eliminarla?
windows
windows-explorer
process
batch-file
HodofHod
fuente
fuente
explorer.exe
ejemplo también, pero por la razón opuesta. Me parece molesto que engendróexplorer.exe
los procesos no siempre se cierran cuando todas sus ventanas asociadas están cerradas. Utilizo el Administrador de tareas para eliminarlos, y tiendo a confiar en el hecho de que las instancias generadas generalmente se establecen en prioridad alta (por alguna razón). Esto funciona bien, pero si lo puse en normal (por razones obvias), corro el riesgo de matar accidentalmente el proceso primario.taskkill /f /im explorer.exe /fi "windowtitle ne N/A"
. Por alguna razón, copiar / pegar eso en el indicador de cmd no funciona; Tienes que escribirlo a mano. No probé un archivo por lotes.Respuestas:
Título basado en el título de la ventana
@ techie007 sugirió matando al
explorer.exe
con titulo de ventanaN/A
.Mando
Cómo funciona
tasklist /nh /v /fi "imagename eq explorer.exe"
Enumera verbalmente todos los procesos con nombre de imagenexplorer.exe
.for /f "tokens=2,10" %%p in ('COMMAND1') do COMMAND2
ejecuta
COMMAND1
. Para cada línea de salida, establece las variables.%%p
y%%q
al segundo y décimo "token" (delimitado por espacio) y se ejecutaCOMMAND2
.En el caso de
taskkill /v
,%%p
ahora tiene el PID y%%q
El (inicio de) el título de la ventana.if "%%q"=="N/A" taskkill /f /pid %%p
comprueba si el título de la ventana esN/A
.Si es así, termina el proceso con
taskkill
.Enfoque basado en el uso de la memoria.
@Syntech señaló esto no es confiable para el Explorador de Windows, pero en los programas, el proceso principal siempre tiene el mayor uso de memoria.
Mando
Cómo funciona
tasklist /nh /fi "imagename eq explorer.exe"
Enumera todos los procesos con nombre de imagenexplorer.exe
.sort /+65
ordena la salida anterior comenzando con el carácter 65 (donde comienza el uso de memoria).for /f "tokens=2" %%p in ('COMMAND') do @set explorerpid=%%p
conjuntosexplorerpid
a la segundatokens=2
) entrada - delimitada por espacios - de cada línea de la salida deCOMMAND
, que es el PID correspondiente.Ya que
tasklist
La salida ha sido ordenada,explorerpid
sostiene el PID reclamado, ytaskkill
termina el proceso.fuente
Quizás pueda decirle al Explorador que muestre la ruta en la barra de título y luego usar la
WINDOWTITLE
¿Filtrar para matarlo basado en eso?La ruta no se mostrará en la barra de título de Explorer con los temas "no clásicos", pero está (ahora) allí; Simplemente no es visible.
taskkill /F /FI "WINDOWTITLE eq C:\PathToThing\RunningInExplorer\ToRestart*"
Es posible que deba cambiar temporalmente a un tema clásico para determinar cuál es la ruta / título para la instancia de Explorer que desea reiniciar.
No 100% a prueba de errores, pero cualquier ventana del Explorador que no tenga esa ruta (parcial) en el título sería al menos segura. :)
editar:
Ya que desea capturar el que tiene el título "N / A", probablemente tendrá que usar un archivo por lotes para poder tokenizar los resultados de una TASKLIST y usar esos token para usar TASKKIL para matar por PID.
Encontré una respuesta a StackOverflow.com que aborda esto:
De la pregunta Taskkill un proceso sin título? es esta respuesta que incluye este ejemplo de archivo por lotes:
Querrá cambiar el comando 'TASKLIST / V' para que sea más específico de Explorer.exe, pero debería darle un buen punto de partida.
fuente
tasklist /fi "imagename eq explorer.exe" /v /fo list
Me dice que su título de ventana es "N / A". Desafortunadamente, `" windowtitle eq N / A "no funciona. ¿Algunas ideas?Elimine el proceso con el PID más bajo (ID de proceso). Se habría iniciado primero, ya que los procesos se numeran secuencialmente.
fuente
tasklist | find /f "explorer"
y pregunte, luego solo pregunte (con la entrada del usuario) cuál es el PID más bajo para eliminar.sed
,awk
, etc.), que bastante fácil de hacer automáticamente. Si no, la entrada del usuario podría ser la mejor opción.