Skip to content
Advertisement

How can I get a list of removable drives plugged in the computer?

I would like to get a list of the removable drivers that are plugged in to the computer.

I think it can be done by using some registry, but I don’t know how exactly.

If there is another way I would like to hear about it.

Note: It’s important that I will be able to separate the removable drives from the fixed drives.

Advertisement

Answer

The algorithm is straightforward:

This is how it looks in Python (using PyWin32 wrappers). Add any of win32con.DRIVE_* constants to drive_types tuple to get different drive types combinations:

code00.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:WorkDevStackOverflowq041465580]> "e:WorkDevVEnvspy_pc064_03.09_test0Scriptspython.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.

As a side note, in my environment (at this point):

  • D: is a partition on an external (USB) HDD

  • H:, I: are partitions on a bootable USB stick (UEFI)

  • The rest are partitions on the (internal) SSD and / or HDD disks

User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement