重启explorer.exe后恢复已打开文件夹窗口的实现方法咨询
重启explorer.exe后恢复已打开文件夹窗口的实现方法咨询
嘿,你这个思路完全靠谱!我来给你拆解一下具体怎么用PowerShell实现,步骤很直观:
第一步:保存当前打开的文件夹路径
我们可以通过Windows的Shell对象获取所有正在打开的文件夹窗口,提取它们的本地路径并保存到一个临时文件里:
# 创建Shell对象来访问资源管理器窗口 $shell = New-Object -ComObject Shell.Application # 筛选出所有普通文件夹窗口,提取并转换成本地路径格式 $folderPaths = $shell.Windows() | Where-Object { $_.LocationURL -match '^file:///' } | ForEach-Object { $decodedPath = [System.Web.HttpUtility]::UrlDecode($_.LocationURL -replace '^file:///', '') $decodedPath -replace '/', '\' } # 把路径保存到系统临时目录的文件里,你也可以改成桌面路径比如"$HOME\Desktop\OpenFolders.txt" $saveFile = "$env:TEMP\OpenFolders.txt" $folderPaths | Out-File -FilePath $saveFile -Encoding UTF8
第二步:重启Explorer.exe
用你提到的命令强制结束并重启资源管理器:
# 强制终止Explorer进程 Stop-Process -Name explorer -Force # 等待2秒确保进程完全退出 Start-Sleep -Seconds 2 # 重启资源管理器 Start-Process explorer.exe
第三步:恢复之前打开的文件夹
等Explorer重启完成后,读取保存的路径并逐个打开:
# 等待5秒让Explorer完全加载(时间可以根据自己的电脑速度调整) Start-Sleep -Seconds 5 # 读取保存的路径并打开对应的文件夹 if (Test-Path $saveFile) { Get-Content $saveFile | ForEach-Object { if (Test-Path $_) { # /select参数会让资源管理器定位到该文件夹并选中 Start-Process explorer.exe -ArgumentList "/select,$_" } } # 可选:恢复完成后删除临时文件 Remove-Item $saveFile -Force }
一些小提示:
- 不需要管理员权限也能运行这些命令,除非你要访问受系统保护的特殊文件夹;
- 代码会自动过滤掉“此电脑”、“回收站”这类特殊窗口,如果需要包含它们,可以调整
Where-Object的判断条件; - 你可以把这三段代码合并成一个完整的PowerShell脚本,一键完成保存、重启、恢复的流程。
备注:内容来源于stack exchange,提问作者fatFeather




