Python复刻PowerShell获取Windows打开文件夹LocationURL的方法
问题描述
现有可获取Windows系统当前已打开文件夹路径的PowerShell脚本如下:
$app = New-Object -COM 'Shell.Application' $app.Windows() | Select-Object LocationURL
需要使用Python实现完全相同的功能,目前已完成Shell.Application COM对象的初始化调用,但无法复现PowerShell中Select-Object LocationURL对应的属性提取逻辑,已编写的未完成Python代码如下:
from win32com import client shell = client.Dispatch("Shell.Application") shell.Windows()
核心需求是复刻PowerShell中$app.Windows() | Select-Object LocationURL的效果,正确提取所有已打开文件夹窗口的LocationURL属性。
实现方案
PowerShell里Select-Object LocationURL的本质是遍历Windows()返回的集合中每一个对象,读取对象的LocationURL属性并汇总。Python中只需要遍历shell.Windows()返回的COM集合对象,逐个读取属性即可。
完整可运行代码:
from win32com import client shell = client.Dispatch("Shell.Application") # 遍历所有Shell窗口,提取LocationURL属性,和PowerShell管道选属性逻辑完全一致 location_urls = [window.LocationURL for window in shell.Windows()] # 输出结果 for url in location_urls: print(url)
可选补充:转成本地文件路径
如果需要把返回的file:///协议格式的URL转换成Windows本地路径格式,可以搭配Python标准库做转换:
from urllib.request import url2pathname from urllib.parse import unquote local_folder_paths = [] for url in location_urls: if url.startswith("file:///"): # 去除协议头、解码URL特殊字符,转成本地路径 path = url2pathname(unquote(url.removeprefix("file:///"))) local_folder_paths.append(path)
注意:
shell.Windows()返回的集合默认会包含所有打开的资源管理器窗口和IE窗口,如果仅需要过滤出文件夹窗口,可以在遍历的时候增加判断条件,筛选窗口类型为资源管理器后再提取属性。
内容的提问来源于stack exchange,提问作者Danilo Toro
相关产品推荐
相关产品推荐

