6 votos

¿Cómo cerrar una carpeta abierta en particular utilizando un archivo cmd o batch?

Puedo abrir una carpeta en particular usando este comando:

start "" "c:\foldername"

En la misma línea, ¿cómo puedo cerrar la misma carpeta usando el símbolo del sistema o el lote?

0 votos

Pero, estoy creando un pequeño archivo por lotes para mis visitantes. Por lo tanto, no hay garantía de que todos hayan instalado AutoHotKey. Por lo tanto, entender mi situación y me proporcionan una solución pls.

5 votos

¿Qué hay de la línea de VBS? set shell = createobject("wscript.shell") : if shell.appactivate("foldername") then shell.sendkeys "%{F4}" Podrías hacer un eco de eso desde un archivo por lotes y ejecutarlo si tiene que ser un archivo por lotes.

1 votos

Impresionante Eso funciona bien cuando se usa ese vbs en lote usando echo. Gracias :) @Helping Hand

6voto

LPChip Puntos 12459

Por defecto, el Explorador no genera procesos separados, por lo que no puedes matar un proceso sin matar todo Windows, la barra de tareas y todo lo que hace el explorador.

Sin embargo, puedes simplemente habilitar la apertura de las ventanas del explorador en su propio proceso y de repente, puedes detener una ventana desde la línea de comandos.

¿Cómo cambiar el explorador para que abra una ventana en su propio proceso?
Llegar allí es diferente para cada versión de Windows, y como se te olvidó mencionar qué versión de Windows estás usando, voy a suponer que Windows 10.

En cualquier ventana del explorador, abra la pestaña Ver y, a la derecha, pulse Opciones.

En las opciones del explorador, vaya a la pestaña Vista, y en Opciones avanzadas, busque un ajuste que diga: Launch folder windows in a separate process

Esta opción también se puede cambiar desde el registro, pero desconozco su ubicación exacta.

Si quieres poder matar una ventana por su ruta, entonces también tienes que cambiar la siguiente configuración: habilitar Display the full path in the title bar

Este segundo ajuste es necesario porque necesitamos expresar qué ventana concreta queremos matar por su título. Por defecto sólo muestra el nombre de la carpeta actual.

Así que si tienes un C:\Program Archivos y un D:\Program Archivos, mostrará Archivos de Programa para ambos, y si tienes ambas carpetas abiertas, 1 comando matará a ambos Windows.

Dicho esto, una vez que haya activado esto, puede utilizar taskkill para terminar esa ventana.

Para saber qué tipo de comando tendría que introducir, puede utilizar tasklist para encontrar la ventana primero. La belleza de tasklist es que utiliza casi la misma sintaxis que taskkill. Al menos para lo que queremos, es lo mismo.

Encontrar la ventana
Abra primero la ventana que desee y, a continuación, abra un símbolo del sistema. Ahora escriba

tasklist /V /FI "IMAGENAME eq explorer.exe"

Esto le dirá exactamente lo que puede matar.

En tu caso querrás utilizar lo siguiente:

tasklist /V /FI "WINDOWTITLE eq C:\Program Files"

si quieres matar a Archivos de Programa.

Tenga en cuenta que si tiene varias ventanas abiertas, el nombre de la ventana sólo se muestra en la última ventana que estaba activa.

Si quiere encontrar cualquier ventana que tenga una ruta abierta con C:\Nen el Explorador, puede utilizar el siguiente comando:

tasklist /V /FI "IMAGENAME eq explorer.exe" /FI "WINDOWTITLE eq C*"

Observe que aquí utilizo un *. tasklist puede utilizar un comodín, pero sólo DESPUÉS de la búsqueda. Así que en el caso anterior, el título de Windows todavía tiene que comenzar con una C, pero cualquier otra cosa es opcional.

Ahora, una vez que hayas averiguado cuál es el comando que quieres utilizar para matar la ventana, sustituye tasklist por taskkill, y elimina el parámetro /V. El /V sólo se utiliza para mostrar más información, como el título de Windows.

Así que para matar la última ventana abierta del explorador que comienza con una C, puedes usar

taskkill /FI "IMAGENAME eq explorer.exe" /FI "WINDOWTITLE eq C*"

0 votos

Excelente y completa respuesta. Yo no había sugerido específicamente el OP matar a Explorer sabiendo que iba a matar a más de la ventana deseada. Totalmente olvidado de ser capaz de abrir en procesos separados.

0 votos

En la última actualización de Windows BuildNumber: 18363 cuando abro la ubicación de una carpeta y hago el tasklist /V /FI "IMAGENAME eq explorer.exe" comando obtengo NA en la columna del título de la ventana.

0 votos

@StephenSherry Acabo de probarlo en mi extremo, parece que Microsoft efectivamente cambió algo. Ya no me salen todos los Windows, sólo aparece el último que he pulsado en dicha búsqueda, aunque tenga habilitado abrir en proceso separado. EDIT: Parece que estoy usando una build más antigua aunque mi pc está actualizado. ¿Por casualidad estás usando una versión interna? Yo, usando 10.0.17763.973

0voto

Zimba Puntos 87

Por defecto, el explorador se ejecuta como un solo proceso, y las ventanas que se abren son sólo un hilo del proceso.
Normalmente, para cerrar un programa, se envía un mensaje de cierre al proceso. En este caso, al cerrar explorer.exe se cerrarán todas las ventanas del explorador.

Para cerrar ventanas individuales, debes abrir cada ventana a través de su propio proceso. Esto se puede hacer a través de la configuración del registro o habilitando en Ver > Opciones > Ver > Configuración avanzada:

"Lanzar ... proceso separado"

a) Busque el PID (ID del proceso) de la ventana que desea cerrar.

a través del gestor de tareas:

  1. En la lista de procesos, haga clic en la flecha a la izquierda de "Windows Explorer"

  2. Comprueba que el nombre de la ventana coincide con la ventana que quieres cerrar

  3. Haga clic con el botón derecho del ratón en el "Explorador de Windows" y haga clic en "Ir a los detalles".

  4. Registrar el pid

o mediante CMD:

tasklist /V /FI "IMAGENAME eq explorer.exe"

Si cada ventana del explorador está abierta en su propio proceso, el comando anterior mostraría el título de la ventana en la última columna.
De lo contrario, se mostraría "N/A".

El pid de todos los Windows del explorador sería el mismo. Los procesos Explorer.exe tienen su propio pid, y el título "N/A"
Si ' proceso separado se ha habilitado, por ejemplo, a través de la opción de vista de carpetas, entonces cada ventana puede cerrarse a través de la opción de ID de proceso y filtro de taskkill .

Para cerrar, la ventana deseada tiene que estar activada primero, de lo contrario el cierre con pid cerrará la última ventana activa, o el cierre con filtro de título de ventana dará error:

INFO: No hay tareas en ejecución con los criterios especificados.

b) taskkill /pid <pid> cerrará la última ventana activa.

Repitiendo este comando se cerrará la siguiente ventana activa.

taskkill /im explorer.exe /fi "windowtitle eq <window name>"

o

taskkill /fi "IMAGENAME eq explorer.exe" /fi "windowtitle eq <window name>"

cerrará la ventana seleccionada por <window name> (no se distingue entre mayúsculas y minúsculas)

Si se ha activado la ruta completa en la barra de título en la vista de carpetas, entonces incluya la ruta completa o los comodines.

Para cerrar todas las ventanas del explorador:

taskkill /im explorer.exe

Notas:

  1. Para activar la ventana del explorador, emita el mismo comando para abrir la ventana, si la reutilización de ventanas está activada.
  2. El pid del proceso de la ventana del explorador está en la última fila de la tabla de respuestas, en la columna "PID"; se puede acceder a través de bucle for.
  3. Una solución vbs para cerrar la ventana de @HelpingHand.
  4. Una solución vbs para activar la ventana.

Probado en Win 10

0voto

WFBD Puntos 11

Este es un script de PowerShell que recorre todas las ventanas del Explorador y las cierra si coincide con la ruta de la carpeta sin ningún método agresivo como taskkill o Alt + F4

$folder = 'C:\path\to\folder'
foreach ($w in (New-Object -ComObject Shell.Application).Windows()) {
    if ($w.LocationURL -ieq ([uri]$folder).AbsoluteUri) { $w.Quit(); break }
}

Esto también se puede hacer en Jscript, VBS o cualquier lenguaje que soporte Objetos Shell que se pueden programar . Se trata de un batch-jscript híbrido que hace lo mismo. La ruta debe estar en esquema URI del archivo en lugar de una ruta normal, por lo que C:\foldername se convertiría en file:///C:/foldername

@if (@CodeSection == @Batch) @then
@echo off
cscript //e:jscript //nologo "%~f0" %*
exit /b
@end

// JScript Section
var folder = "file:///C:/foldername"; // the folder to check
var shellWindows = (new ActiveXObject("shell.application")).Windows();
if (shellWindows != null)
{
    for (var win = new Enumerator(shellWindows); !win.atEnd(); win.moveNext())
        if (folder == win.item().LocationUrl) win.item().Quit()
}

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: