You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 03:18:16