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

Windows下Python自动在USB设备创建目录的脚本优化及报错解决问询

问题原因分析

你更新后代码报错的核心原因是调用Win32_DiskDrive返回的DeviceID是物理设备的底层访问路径,不是Windows系统挂载后可直接读写的盘符路径(比如I:\),操作系统不允许直接在物理设备路径下创建文件目录。

无硬编码实现方案

有两种符合你需求的实现,都不需要硬编码磁盘描述、盘符路径:

方案1:直接获取当前程序所在盘符(最适配你的场景)

因为你的程序本身就是存放在目标USB设备中运行的,直接读取当前执行文件的路径即可定位到所属USB盘符,无需调用WMI扫描磁盘,代码最简:

import os
import sys

# 兼容打包成EXE后的路径获取
if getattr(sys, 'frozen', False):
    # 打包为exe后运行的情况
    current_exe_path = sys.executable
else:
    # 直接运行py脚本的情况
    current_exe_path = os.path.abspath(__file__)

# 提取盘符 比如I:\
usb_root = os.path.splitdrive(current_exe_path)[0] + os.sep
dir_name = "Backup"
file_path = os.path.join(usb_root, dir_name)

if not os.path.exists(file_path):
    os.makedirs(file_path)
    print(f"Folder created in ==> {usb_root}")

方案2:WMI自动识别所有USB可移动磁盘盘符(无需硬编码描述)

如果你需要主动扫描所有接入的USB可移动磁盘,不用硬编码Removable Disk、My Passport这类描述字段,可以通过DriveType字段判断:Win32_LogicalDisk的DriveType值为2时代表可移动磁盘,无需匹配描述文本:

import wmi
import os

c = wmi.WMI()

def get_usb_disks():
    usb_disks = []
    for disk in c.Win32_LogicalDisk():
        # DriveType=2 标准定义为可移动磁盘 无需匹配描述文本
        if disk.DriveType == 2:
            usb_disks.append({
                "description": disk.Description,
                "device_id": disk.DeviceID,
                "volume_name": disk.VolumeName
            })
    return usb_disks

# 取第一个识别到的USB磁盘 你也可以根据业务逻辑选择对应磁盘
usb_list = get_usb_disks()
if not usb_list:
    print("未检测到可移动USB磁盘")
    exit()

target_usb = usb_list[0]
usb_root = target_usb['device_id'] + os.sep
dir_name = "Backup"
file_path = os.path.join(usb_root, dir_name)

if not os.path.exists(file_path):
    os.makedirs(file_path)
    print(f"Folder created in ==> {target_usb}")
注意事项
  • 如果你使用方案2同时接入了多个USB磁盘,可根据VolumeName等字段筛选你需要的目标磁盘,无需硬编码盘符
  • 部分移动硬盘的DriveType可能被识别为3(本地磁盘),这种情况可以补充判断InterfaceType == 'USB',关联Win32_DiskDrive和Win32_LogicalDisk的对应关系获取盘符即可,不需要直接用物理设备路径操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:06:05