如何获取插入计算机的可移动驱动器的列表?

2023-12-08

我想获取插入计算机的可移动驱动程序的列表。

我怎样才能做到这一点pywin32Python 中的模块?

注意:重要的是我能够将可移动驱动器与固定驱动器分开。


该算法很简单:

  • Call [MS.Docs]:GetGetLogicalDriveStringsW 函数,这将返回一个包含所有现有的字符串rootdirs (e.g. C:\\) 隔开NUL (\x00) chars

    • 迭代rootdirs并使用获取每个人的类型[MS.Docs]:GetDriveTypeW 函数

    • 过滤可移动驱动器(具有类型驱动器_可移动)

这就是它的样子Python (using PyWin32包装纸)。添加任意一个win32con.DRIVE_*常数为驱动器类型元组以获得不同的驱动器类型组合:

代码00.py:

#!/usr/bin/env python

import sys

import win32con as wcon
from win32api import GetLogicalDriveStrings
from win32file import GetDriveType


def get_drives_list(drive_types=(wcon.DRIVE_REMOVABLE,)):
    drives_str = GetLogicalDriveStrings()
    drives = (item for item in drives_str.split("\x00") if item)
    return [item[:2] for item in drives if not drive_types or GetDriveType(item) in drive_types]


def main(*argv):
    drive_filters_examples = (
        (None, "All"),
        ((wcon.DRIVE_REMOVABLE,), "Removable"),
        ((wcon.DRIVE_FIXED, wcon.DRIVE_CDROM), "Fixed and CDROM"),
    )
    for drive_types_tuple, display_text in drive_filters_examples:
        drives = get_drives_list(drive_types=drive_types_tuple)
        print("{:s} drives:".format(display_text))
        for drive in drives:
            print("{:s}  ".format(drive), end="")
        print("\n")


if __name__ == "__main__":
    print("Python {:s} {:03d}bit on {:s}\n".format(" ".join(elem.strip() for elem in sys.version.split("\n")),
                                                   64 if sys.maxsize > 0x100000000 else 32, sys.platform))
    rc = main(*sys.argv[1:])
    print("\nDone.")
    sys.exit(rc)

Output:

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q041465580]> "e:\Work\Dev\VEnvs\py_pc064_03.09_test0\Scripts\python.exe" ./code00.py
Python 3.9.9 (tags/v3.9.9:ccb0e6a, Nov 15 2021, 18:08:50) [MSC v.1929 64 bit (AMD64)] 064bit on win32

All drives:
C:  D:  E:  F:  G:  H:  I:  L:  M:  N:

Removable drives:
H:  I:

Fixed and CDROM drives:
C:  D:  E:  F:  G:  L:  M:  N:


Done.

附带说明一下,在我的环境中(此时):

  • D:是外部分区(USB) HDD

  • H:, I:是可引导分区上的USB stick (UEFI)

  • 其余的是(内部)分区SSD和/或HDD disks

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取插入计算机的可移动驱动器的列表? 的相关文章

随机推荐

  • 部署Python程序出现问题(用py2exe打包)

    我有一个问题 我的程序使用了 py2exe 它在我的计算机上运行 我用 Inno Setup 打包它 仍然可以在我的计算机上运行 但是当我将它发送到另一台计算机时 尝试运行该应用程序时出现以下错误 CreateProcess 失败 代码 1
  • utf-8字符不显示在chrome中[关闭]

    Closed 这个问题需要调试细节 目前不接受答案 html 特殊字符在 chrome 中无法正确显示的问题请参见 示例页面 我已经检查并重新保存了项目中的每个文件 因为 utf 8 确认了我的元标记减速 并确认 chrome 设置为默认为
  • 将数组放入 class.property

    我有一个具有以下属性的类 Dim pBonds as string Private Property Get Bonds As String Bonds pBonds End Property Private Property Get Bo
  • 如何检查用户输入是否是字符串

    我有两个用户输入 在第一个用户必须插入字符串类型的文本 在第二个用户必须插入 int 类型的数字 我使用了 try except ValueError 因此用户无法在需要 int 的地方插入字符串 尽管当用户在需要字符串的地方插入 int
  • 将 TensorBoard 2 中的 2 个图与 TensorFlow 2 合并

    我想使用 Tensorflow 和 Tensorboard V2 将精度和召回率合并到同一个图上 我找到了许多以前版本的示例 但没有一个适用于我的情况 我创建了一个 Keras 回调来计算精度和召回率 然后调用张量流摘要将它们记录在同一个记
  • ARKit – 在不可见平面下渲染 3D 对象

    我有一个带有隐形物体的 ARKit 场景SCNPlane plane geometry firstMaterial colorBufferWriteMask 该平面放置在地面上 用于渲染deferred shadows来自放置在场景中的其他
  • #define 变量的类型

    如果我有 define MAXLINE 5000 MAXLINE 理解为什么类型 我应该假设它是一个int 我可以以某种方式测试它吗 一般来说 如何判断某一种类型 defineed 变量 它没有类型 这是一个简单的文本替换 文本 5000
  • Terraform 远程状态 s3 存储桶创建包含在状态文件中吗?

    我正在寻找在 S3 存储桶中创建和存储状态文件的最佳实践 我应该将 S3 存储桶的创建与基础设施一起包括在内还是 为其 S3 存储桶创建一个单独的状态文件 并为资源创建一个不同的状态文件 如果它是不同的文件 我还需要存储创建的 s3 存储桶
  • Apache Spark - foreach 与 foreachPartition 何时使用 什么?

    我想知道是否foreachPartition与foreach方法考虑到我正在流过的情况RDD为了对累加器变量执行一些求和 foreach and foreachPartitions是行动 foreach 函数 单位 用于调用具有副作用的操作
  • Objective C - iOS - 在 webViewDidFinishLoad 执行过程中调用 Dealloc

    我在 ios 中遇到内存管理问题 问题是 当我将一个具有 webView 的 viewController 推送到导航堆栈时 当我在加载 webview 之前单击返回时 我得到了 exec bad access 在 A 类 中 我创建一个新
  • 获取资源文件夹中的文件列表 - iOS

    假设我的 iPhone 应用程序的 资源 文件夹中有一个名为 文档 的文件夹 有没有一种方法可以在运行时获取该文件夹中包含的所有文件的数组或某种类型的列表 所以 在代码中 它看起来像 NSMutableArray myFiles get a
  • 如何结合 SELECT DISTINCT 和 SUM()

    我在 Oracle 中有一个如下所示的表 Products Product ID Product NME Product SUP Quantity 1 Apple USA 100 2 Fish Japan 50 3 Wine Italy 1
  • 如何改变 django 模型中 unique true 的行为?

    这里我没有从数据库中删除模型对象 我只是改变is deleted删除时状态为 True 但在这样做的同时unique True对于已删除的对象给出错误 那么我该如何处理这个问题 我想排除is deleted True来自唯一 True 的对
  • TStringGrid - OnMouseUp 未被调用!

    我在 Delphi 7 中的 TStringGrid 有一个奇怪的行为 如果弹出菜单与网格关联 Delphi 不会调用 OnMouseUp 事件 基本上 当按下人民币时 菜单的弹出会以某种方式取消 延迟 OnMouseUp 实际上 为了 1
  • 如何执行存储在 varchar 变量中的数学表达式

    我的数据库函数中有一个变量 LocalVariable 2 3 100 我想通过执行另一个变量中的表达式来获得结果 有人可以建议如何执行该表达式吗 另外 我想在数据库函数中 而不是在存储过程中 执行此操作 我期望的结果是 600 DECLA
  • 为什么我的 int[] 数组循环越界?

    Warning 我对 Java 和一般编程非常陌生 我会尽量说得清楚 我正在尝试取一个简单的整数 inputnumber 将其转换为字符串 temp 创建一个新的 int 数组 numberarray 并从最后一位数字开始循环遍历这个 in
  • Gradle 3.0.0 alpha 变体输出问题

    我想要有一个不一样的versionCode for debug构建类型而不是其中的类型release构建类型 这曾经通过在 Gradle Android 插件 v2 3 2 Gradle v3 3 中使用下面的配置来工作 但现在在 v3 0
  • SQL 到实体框架计数分组

    我需要翻译这个SQL声明给一个Linq Entity询问 SELECT name count name FROM people GROUP by name 查询语法 var query from p in context People gr
  • Karate API 测试 - 在同一功能文件中的不同场景中重用变量

    Karate 是否支持这样的功能 您可以在场景中定义变量并在同一功能文件的其他场景中重用它 我尝试做同样的事情但得到一个错误 在同一特征文件中重用变量的最佳方法是什么 Scenario Get the request Id url base
  • 如何获取插入计算机的可移动驱动器的列表?

    我想获取插入计算机的可移动驱动程序的列表 我怎样才能做到这一点pywin32Python 中的模块 注意 重要的是我能够将可移动驱动器与固定驱动器分开 该算法很简单 Call MS Docs GetGetLogicalDriveString