gpt4 book ai didi

python - 如何使用 python 在 Windows 上查找未分配的驱动器号

转载 作者:可可西里 更新时间:2023-11-01 11:42:56 24 4
gpt4 key购买 nike

我需要通过 python 脚本在 Windows 上找到一个可用的驱动器盘符。 Free 代表未分配给任何物理或远程设备。

我做了一些研究并在 stackoverflow 上找到了解决方案(不记得确切的链接):

# for python 2.7
import string
import win32api

def getfreedriveletter():
""" Find first free drive letter """
assigneddrives = win32api.GetLogicalDriveStrings().split('\000')[:-1]
assigneddrives = [item.rstrip(':\\').lower() for item in assigneddrives]
for driveletter in list(string.ascii_lowercase[2:]):
if not driveletter in assigneddrives:
return driveletter.upper() + ':'

这适用于所有物理驱动器和连接的网络驱动器。但不适用于当前断开连接的驱动器。如何获取所有使用过的盘符,以及临时未使用的盘符?

最佳答案

创建子进程的成本相对较高,解析自由格式文本输出并不是最可靠的技术。您可以改用 PyWin32 来调用 net use 调用的相同 API 函数。

import string
import win32api
import win32wnet
import win32netcon

def get_free_drive():
drives = set(string.ascii_uppercase[2:])
for d in win32api.GetLogicalDriveStrings().split(':\\\x00'):
drives.discard(d)
# Discard persistent network drives, even if not connected.
henum = win32wnet.WNetOpenEnum(win32netcon.RESOURCE_REMEMBERED,
win32netcon.RESOURCETYPE_DISK, 0, None)
while True:
result = win32wnet.WNetEnumResource(henum)
if not result:
break
for r in result:
if len(r.lpLocalName) == 2 and r.lpLocalName[1] == ':':
drives.discard(r.lpLocalName[0])
if drives:
return sorted(drives)[-1] + ':'

请注意,此函数返回最后一个可用的驱动器号。通常的做法是从列表末尾分配映射驱动器和替代驱动器(例如来自 net.exe 和 subst.exe),并从开头分配本地系统驱动器。

关于python - 如何使用 python 在 Windows 上查找未分配的驱动器号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53607694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com