[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 【已解决】批处理如何一次关闭多个打开的文件夹窗口?

本帖最后由 pcl_test 于 2016-7-15 11:20 编辑

如题,最近工作经常打开大量的文件夹窗口。关闭起来非常闹心。
所以想搞个省事的。
但是不知道怎么办
哪位给提个醒?

回复 1# chouxia
  1. tskill explorer
复制代码

TOP

回复 2# ygqiang


    这么干桌面就over了啊。
总这么干系统受不了啊

TOP

找到一个 PowerShell 方案, 但我没测试
来源 http://stackoverflow.com/questio ... ndows-in-powershell
  1. $a = (New-Object -comObject Shell.Application).Windows() |
  2. ? { $_.FullName -ne $null} |
  3. ? { $_.FullName.toLower().Endswith('\explorer.exe') }
  4. $a | % {  $_.Quit() }
复制代码
另有一个 AHK 方案, 测试通过, 不会 kill 掉 桌面, 因为只是关窗口, 并没有 kill explorer 的进程
来源 https://autohotkey.com/board/top ... l-explorer-windows/
  1. GroupAdd,ExplorerGroup, ahk_class CabinetWClass
  2. GroupAdd,ExplorerGroup, ahk_class ExploreWClass
  3. ; close all Explorer windows when Winkey x pressed
  4. #x::
  5.   if ( WinExist("ahk_group ExplorerGroup") )
  6.     WinClose,ahk_group ExplorerGroup
  7. return
复制代码
1

评分人数

TOP

回复 4# aa77dd@163.com


    感谢

TOP

vbs
  1. Set wins = CreateObject("Shell.Application").Windows
  2. If not IsNull(wins) Then
  3.     For Each w In wins
  4.         If InStr(LCase(w.FullName), "\explorer.exe") >0 Then w.Quit
  5.     Next
  6. End If
复制代码

TOP

回复 6# pcl_test
hi,你这vbs是所有关闭,能不能是:给出路径(C:\back),检查打开文件夹在所给的路径内(多个打开文件夹,C:\back\*,C:\back\*\*,....),是才闭关,批处理最好,谢谢

TOP

回复 7# yunyan100


    如你所说,自由决定关闭文件夹路径,遍历其下打开的所有文件夹,找到符合条件的窗口就关闭它。WIN10测试通过。
  1. @if (0)==(0) echo off
  2. set /p "strFolder=拖入遍历的文件夹 : "
  3. for /f "tokens=*" %%i in ('dir /s/b/ad %strFolder%') do (
  4. cscript -nologo -e:jscript %~s0 CloseOpenWindow "%%~ni"
  5. echo,
  6. )
  7. pause
  8. goto :EOF
  9. @end
  10. var func = WScript.Arguments(0);
  11. var str = WScript.Arguments(1);
  12. switch (func) {
  13. case "CloseOpenWindow":
  14. CloseOpenWindow(str);
  15. break;
  16. default:;
  17. }
  18. function CloseOpenWindow(str) {
  19. WScript.Echo("当前传入参数为 : " + str);
  20. var oShell = new ActiveXObject("WScript.Shell");
  21. var ret = oShell.AppActivate(str);
  22. WScript.Echo("打开状态 : " + ret);
  23. if (ret) {
  24. /// 打开状态为真时,关闭它
  25. oShell.SendKeys("%{F4}");
  26. WScript.Echo("存在打开文件夹 " + str + " ,关闭之");
  27. }
  28. }
复制代码
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

如要将指定文件夹本身也关闭,对输入路径再作一次关闭调用即可。
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

回复 9# amwfjhh
感谢帮助,我试了下,没反应,win10,
下面的我用,'dir/b/ad/s %%i\*,能用,但路径下的文件夹全部执行关闭,想改下,打开的文件夹,在路径下的才关闭
  1. for %%a in ("%cd%") do echo %%a>>%dp%\1.txt
  2. dir/ad "%cd%\" >nul 2>nul&&cd..&&goto :ren
  3. (for /f "delims=" %%a in (%dp%\1.txt) do (setlocal enabledelayedexpansion&for %%i in (%%a) do (set "pat=%%~nxi"&call :ltty
  4. (if "!pat!" neq "!pan!" if "!pat!" neq "" ren %%i "!pan!"||for /f "tokens=*" %%s in ('dir/b/ad/s %%i\*') do (mshta "javascript:wnds=new ActiveXObject('Shell.Application').windows(); for (i=0; i<wnds.Count; i++) {w=wnds(i); w && w.document && w.document.folder && '%%~nxs'==w.document.folder.title && w.quit();} close();" && ren %%i "!pan!")))&endlocal)&del /f/s/q/a %dp%\1.txt)>nul 2>nul
复制代码

TOP

回复 10# yunyan100


    你是怎么使用的?输入参数是你要遍历的文件夹,这个脚本关闭的是它子文件夹中有被打开的窗口。如图所示:

传入的路径下有一个文件夹,若其被打开,则遍历时会被探测到并被关闭。
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

回复 11# amwfjhh

TOP

回复 12# yunyan100


    奇怪,难道你那脚本宿主有问题……
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

回复 13# amwfjhh
我选用你的保存bat效果怎样,可以用的话,在我bat文件里面,我前面发的是的意图,

TOP

回复 14# yunyan100


    什么意思?引用这段脚本?如果是这样随便引用,这是讨论区,发出来就是提供参考的。
另,你运行无报错,但是却无法激活窗口,可能是安全软件禁用相关功能或者脚本宿主功能不全,可单独测试一下WScript.Shell的窗口激活功能是否能正常起用。
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

返回列表