如何在Python/Windows中获取不包含SUBST映射的本地驱动器列表?

1 投票
1 回答
1103 浏览
提问于 2025-04-16 06:55

我想找个方法来获取Windows电脑上的所有本地驱动器,

到目前为止,我尝试了两个方法:

1)

# Win32Com
from win32com.client import Dispatch
import sys

fso = Dispatch('Scripting.FileSystemObject')
for drive in fso.Drives:
    print drive, drive.DriveType

2)

# win32api
import win32api
import win32file
drives = (drive for drive in win32api.GetLogicalDriveStrings().split("\000") if drive)
for drive in drives:
    print drive, win32file.GetDriveType(drive)

这两种方法(几乎)都能正常工作,我得到了我的驱动器列表,比如:

A: 1    // Removable
C: 2    // Fixed
D: 2    
E: 2
G: 2    // Fixed    (??? SUBST'ed drive)
I: 4    // Cd-Rom
X: 3    // Network

但是G:驱动器是一个SUBST驱动器(例如:用SUBST G: C:\TEST创建的),

我找不到方法来区分它和一个“真实”的本地驱动器。

有什么想法吗?

谢谢,

Pablo

1 个回答

1

谷歌告诉我,如果你尝试获取一个SUBST(虚拟驱动器)驱动器的GUID(全局唯一标识符),那是会失败的:

>>> import win32file
>>> win32file.GetVolumeNameForVolumeMountPoint("C:\\")
'\\\\?\\Volume{50c800a9-c62e-11df-b5bb-806e6f6e6963}\\'
>>> win32file.GetVolumeNameForVolumeMountPoint("K:\\")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
pywintypes.error: (87, 'GetVolumeNameForVolumeMountPoint', 
                       'The parameter is incorrect.')

这个方法看起来可以用,但可能不太可靠。

撰写回答