如何使用 cmd 或批处理文件关闭特定的打开的文件夹?

如何使用 cmd 或批处理文件关闭特定的打开的文件夹?

我可以使用此命令打开特定文件夹:

start "" "c:\foldername"

同样,如何使用命令提示符或批处理关闭同一个文件夹?

答案1

默认情况下,Explorer 不会产生单独的进程,因此,您不能在不终止所有窗口、任务栏和 Explorer 执行的其他一切操作的情况下终止一个进程。

但是,您可以简单地在其自己的进程中启用打开资源管理器窗口,然后突然从命令行停止一个窗口。

如何更改资源管理器以在其自己的进程中打开窗口?
每个 Windows 版本的方法都不同,由于您忘记提及您使用的是哪个版本的 Windows,我将假设是 Windows 10。

在任何资源管理器窗口中,打开“查看”选项卡,然后在右侧按“选项”。

在资源管理器选项中,转到“视图”选项卡,然后在“高级选项”下查找以下设置:Launch folder windows in a separate process

此选项也可以从注册表中更改,但我不知道它的具体位置。

如果您希望能够通过路径关闭窗口,那么您还必须更改以下设置:启用Display the full path in the title bar

第二个设置是必需的,因为我们需要通过标题来表达我们想要关闭的特定窗口。默认情况下,它仅显示当前文件夹的名称。

因此,如果您有 C:\Program Files 和 D:\Program Files,它将显示这两个文件夹的 Program Files,如果您打开了这两个文件夹,则 1 个命令将关闭这两个窗口。

也就是说,一旦您启用此功能,您就可以使用它taskkill来结束该窗口。

为了了解您必须输入哪种命令,您可以先使用它tasklist来查找窗口。tasklist 的优点在于它使用的语法与 taskkill 大致相同。至少对于我们想要的,它是相同的。

寻找窗口
首先打开所需的窗口,然后打开命令提示符。现在输入

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

这将确切地告诉你可以杀死什么。

对于您来说,您可能需要使用以下内容:

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

如果您想终止 Program Files。

请注意,如果您打开了多个窗口,则仅显示最后一个活动窗口的窗口名称。

如果要在资源管理器中查找以 C:\ 打开的路径的任何窗口,您可以使用以下命令:

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

注意,我在这里使用了 *。tasklist 可以使用通配符,但只能在搜索之后使用。因此,在上述情况下,窗口标题仍必须以 C 开头,但其他任何内容都是可选的。

现在,一旦您找到要用来关闭窗口的命令,请将 tasklist 替换为 taskkill,并删除 /V 参数。/V 仅用于显示更多信息,例如窗口标题。

因此,要终止最后打开的以 C 开头的资源管理器窗口,您可以使用:

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

答案2

这是一个 PowerShell 脚本,循环遍历所有资源管理器窗口并关闭如果它与文件夹路径匹配无需任何激进的方法,如 taskkill 或Alt+F4

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

或者:

foreach ($w in (New-Object -ComObject Shell.Application).Windows()) {
    if ($w.Document.Folder.Self.Path -ieq $folder) { $w.Quit(); break }
}

这也可以在 Jscript、VBS 或任何支持可编写脚本的 Shell 对象。这是一个混合批处理-jscript,可执行相同的操作。路径需要位于文件 URI 方案而不是正常路径,因此C:\foldername会变成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()
}

答案3

默认情况下,explorer 作为单个进程运行,打开的任何窗口都只是该进程的一个线程。
通常,要关闭程序,您需要向该进程发送关闭消息。在这种情况下,关闭 explorer.exe 将关闭所有 explorer 窗口。

要关闭单个窗口,您可以通过其自己的进程打开每个窗口。这可以通过注册表设置或在“视图”>“选项”>“视图”>“高级设置”下启用来完成:

“启动...单独的进程”

a) 找到您想要关闭的窗口的 PID (进程 ID)。

通过任务管理器:

  1. 在进程列表中,单击“Windows 资源管理器”左侧的箭头
  2. 检查窗口名称与您要关闭的窗口匹配
  3. 右键单击“Windows 资源管理器”,单击“转到详细信息”
  4. 记录 pid

或通过 CMD:

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

如果每个资源管理器窗口都在其自己的进程中打开,则上述命令将在最后一列显示窗口标题。
否则将显示“N/A”。

所有资源管理器窗口的 pid 都是相同的。Explorer.exe 进程有自己的 pid,标题为“N/A”
如果'单独的进程' 已启用,例如通过文件夹视图选项,则可以通过的进程 ID 和过滤器选项关闭每个窗口taskkill

要关闭,必须先激活所需的窗口,否则使用 pid 关闭将关闭最后一个活动窗口,或者使用窗口标题过滤器关闭将出现错误:

信息:没有按照指定条件运行的任务。

b)taskkill /pid <pid> 将关闭最后一个活动窗口。

重复此命令将关闭下一个活动窗口。

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

或者

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

将关闭选定的窗口<window name>(不区分大小写)

如果在文件夹视图中启用了标题栏中的完整路径,则包含完整路径或通配符。

要关闭所有资源管理器窗口:

taskkill /im explorer.exe

笔记:

  1. 要激活资源管理器窗口,请发出相同的命令来打开窗口(如果启用了窗口重用)。
  2. 资源管理器窗口进程的 pid 位于响应表的最后一行,在“PID”列中;可以通过 FOR 循环访问。
  3. 一个来自@HelpingHand 的 vbs 解决方法来关闭窗口。
  4. 激活窗口的 vbs 解决方法。

在 Win10 上测试过

相关内容