使用批处理文件关闭文件夹窗口

3

我在桌面上有一个名为test的文件夹。我想创建一个批处理文件,以便在使用Windows资源管理器打开此文件夹时自动关闭窗口。我尝试了下面的命令,但执行后没有任何反应。

TASKKILL /F /FI "WINDOWTITLE eq test" /IM explorer.exe

显示的消息是:
No tasks running with the specified criteria.

需要帮忙吗?

4个回答

4

如果在Windows注册表中,无法使用命令taskkill关闭文件夹的Windows资源管理器窗口。

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced

双词SeparateProcess分别具有值0,选项文件夹选项视图选项卡中未被选中。

正如foxidrive所发现的(请阅读下面的评论),我也可以证实,在Windows XP SP3上启用此设置对打开文件夹时运行的explorer.exe数量没有影响,即使重启Windows也是如此。

因此,这取决于Windows版本(2000、XP、Vista、7、8、8.1)和文件夹选项

  • 在标题栏显示完整路径
  • 在单独的进程中启动文件夹窗口

如果可能的话,是否可以使用命令taskkill关闭资源管理器文件夹窗口,以及要在标题栏中查找哪个字符串,只是文件夹名称还是完整路径。

在Windows XP上或未启用“在单独进程中启动文件夹窗口”时,文件夹窗口不会作为单独的任务或进程打开。
无论打开多少个文件夹窗口,每个用户的explorer.exe进程数始终只有1个。每个文件夹窗口实际上只是一个始终在运行的Windows资源管理器(桌面),在单独的线程中打开。Windows资源管理器只是在Windows任务栏和Windows任务管理器的“应用程序”选项卡上模拟文件夹窗口是一个单独的任务。但即使打开多个文件夹窗口,“进程”选项卡上也只列出一个explorer.exe
可以使用免费工具SysinternalsProcess Explorer观察Windows资源管理器的这种行为,方法是选择explorer.exe并在该进程的下方窗格中查看其句柄,其中包含已打开的文件夹窗口的许多其他句柄。
需要一个控制台应用程序,可以根据标题查找窗口,获取该窗口的句柄,并向此文件夹窗口发送WM_CLOSE事件消息。请参见以下示例:

当我测试时,这并不是真的。使用tasklist并过滤explorer.exe,然后启动explorer c:\folder并重复您的任务列表命令。您会发现列出了两个具有不同PID的explorer.exe - foxidrive
是的,我看到了你的评论并尝试了发布的命令。但它在Windows XP SP3上无法工作。看起来它取决于Windows版本或设置,如果在打开新文件夹窗口时启动explorer.exe的新实例,或者在已运行的Explorer实例的线程中打开文件夹窗口。我已经在互联网上搜索了Explorer不同行为的解释,但目前还没有找到任何东西。有一个设置可以控制标题栏中显示的内容-完整路径或只是文件夹名称,但是在我的计算机上,taskkill无论如何都失败了。 - Mofi
我在Windows 8.1上进行了测试,并且我知道某些版本的Windows需要额外的空格 - 这是一个错误。 - foxidrive
是的,在“资源管理器选项”中,用户可以配置为使用单个窗口或多个窗口。 - foxidrive
没错。即使在Windows XP上,也可以在“文件夹选项”中的“查看”选项卡中找到“在单独进程中启动文件夹窗口”的选项,例如从Windows资源管理器的“工具”菜单或“控制面板”打开。但是,在启用该选项后仍然需要重新启动Windows才能生效。 - Mofi
显示剩余2条评论

2
我找到的这里的解决方案在XP SP 3上运行良好。你只需要使用小工具NirCmd:

nircmd.exe win close title "some window title"

0

当在“文件夹选项”下启用标题中的完整路径显示时,错误结果会出现。

您可以将“test”替换为完整路径,或者禁用完整路径显示。

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

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

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和过滤选项关闭每个窗口。

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

INFO:未使用指定标准运行的任务。

b)taskkill /pid <pid> 将关闭最后一个活动窗口。
重复此命令将下一个窗口。

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

<窗口名称>不区分大小写
如果在文件夹视图中启用了标题栏的完整路径,则包括完整路径或通配符。

关闭所有资源管理器窗口:
taskkill /im explorer.exe

注意事项:

  1. 要激活资源管理器窗口,请发出相同的命令以打开窗口(如果启用了窗口重用)。
  2. 资源管理器窗口进程的pid在响应表的最后一行,列名为“PID”,可以通过FOR循环访问。
  3. 来自@HelpingHand的vbs解决方案可关闭窗口:
    https://superuser.com/questions/1263315/how-to-close-a-particular-opened-folder-using-cmd-or-batch-file
  4. 激活窗口的vbs解决方案:
    http://superuser.com/questions/327676/application-to-automatically-switch-between-two-applications-in-windows

在Win 10上测试通过


0

这在设置为“单窗口”的资源管理器文件夹选项下适用于Windows 8.1,但根据Mofi的答案和评论,解决方案取决于Windows版本

在Windows XP中不起作用。

TASKKILL /F /FI "WINDOWTITLE eq %userprofile%\desktop\test" /IM explorer.exe

我曾尝试过输入完整路径,但这也是不正确的。 - xarlap
它在Windows 8.1上运行良好,但从Mofi的回答和评论中可以看出,了解Windows版本非常重要。 - foxidrive

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接