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

如何通过Python获取Windows网络驱动器的已记忆连接路径

获取Windows已记忆的网络驱动器路径

当使用win32wnet.WNetGetConnection()获取已记忆但处于“不可用”状态的网络驱动器时,会触发错误码1201,无法直接拿到路径数据。这种情况下,你可以通过读取Windows注册表来获取这些已记忆的连接信息,无需依赖net use命令。

原理说明

Windows会将已记忆的网络驱动器信息存储在当前用户的注册表项中,路径为HKEY_CURRENT_USER\Network\<DriveLetter>,其中RemotePath键值对应的就是该驱动器关联的网络路径。

代码实现

仅获取已记忆未连接的驱动器

import winreg
from string import ascii_lowercase

def get_remembered_network_drives():
    remembered_drives = {}
    reg_root = winreg.HKEY_CURRENT_USER
    reg_network_path = r"Network"

    try:
        with winreg.OpenKey(reg_root, reg_network_path) as network_key:
            index = 0
            while True:
                try:
                    # 枚举每个已记忆的盘符子项
                    drive_letter = winreg.EnumKey(network_key, index)
                    drive = f"{drive_letter}:"
                    # 打开对应盘符的注册表项
                    with winreg.OpenKey(network_key, drive_letter) as drive_key:
                        # 读取RemotePath键值
                        remote_path, _ = winreg.QueryValueEx(drive_key, "RemotePath")
                        remembered_drives[drive] = remote_path
                    index += 1
                except OSError:
                    # 枚举完所有子项后退出循环
                    break
    except FileNotFoundError:
        # 无已记忆的网络驱动器时跳过
        pass

    return remembered_drives

# 调用示例
for drive, path in get_remembered_network_drives().items():
    print(f"{drive}: {path}")

合并已连接和已记忆的驱动器信息

如果需要同时获取当前已连接和已记忆未连接的所有网络驱动器,可以结合原有的WNetGetConnection逻辑:

import winreg
import win32wnet
from string import ascii_lowercase

def get_all_network_drives():
    all_drives = {}

    # 先获取当前已连接的驱动器
    for letter in ascii_lowercase:
        drive = f"{letter}:"
        try:
            all_drives[drive] = win32wnet.WNetGetConnection(drive)
        except win32wnet.error:
            # 忽略连接失败的情况,后续处理已记忆项
            pass

    # 再补充已记忆但未连接的驱动器
    reg_root = winreg.HKEY_CURRENT_USER
    reg_network_path = r"Network"
    try:
        with winreg.OpenKey(reg_root, reg_network_path) as network_key:
            index = 0
            while True:
                try:
                    drive_letter = winreg.EnumKey(network_key, index)
                    drive = f"{drive_letter}:"
                    # 仅添加未在已连接列表中的项
                    if drive not in all_drives:
                        with winreg.OpenKey(network_key, drive_letter) as drive_key:
                            remote_path, _ = winreg.QueryValueEx(drive_key, "RemotePath")
                            all_drives[drive] = remote_path
                    index += 1
                except OSError:
                    break
    except FileNotFoundError:
        pass

    return all_drives

# 调用示例
for drive, path in get_all_network_drives().items():
    print(f"{drive} -> {path}")

内容的提问来源于stack exchange,提问作者dustmole

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:45:47