2009-11-20 125 views
3

这是问题所在。我们有100多个外部500GB USB驱动器。每个驱动器将在一年中前往新的位置。自动检测USB驱动器插入Windows系统,然后分配Z:\盘符的最佳方法是什么?这些USB驱动器将被插入到许多不同的电脑让喜欢本Python检测USB驱动器,然后分配驱动器号?

import subprocess 

diskpart_data = "z-drive.txt" 
open (diskpart_data, "w").write (""" 
select volume F: 
assign letter=Z 
""") 
subprocess.call ('diskpart /s %s' % diskpart_data) 

脚本是很难由于使用在不同的Windows系统上的移动USB驱动器的所有时间的动态性质?您可以通过WMI自动检测或者使用NTFS进行某种卷装入?

+0

如果Z:驱动器已插入正在使用的机器中,您会发生什么? – 2009-11-20 15:46:12

+0

脚本需要在驱动器上还是在每个插入的Windows计算机上? – slurdge 2009-11-20 15:55:31

+0

@Jim B 我们选择Z:\驱动器,因为它并未在当前实施该环境的环境中使用。客户端还会提前知道在运行此脚本时不会映射z:\驱动器。 @slurdge 我们得到一个USB驱动器,运行一个不同的python脚本,将6,000个视频移动到视频目录。然后我们使用访问模块在报告中创建超链接,并参考这些视频。因此,可以全面使用映射z:\ videos \ ,并且不会中断报告中的链接。 – Dunwitch 2009-11-20 17:22:20

回答

2

as terabytest said,you may run a script from a autorun.inf in the drive of the drive。就个人而言,我会做一个批处理脚本:

(echo select volume %~d0 && echo assign letter=Z) | diskpart 

%~d0检索当前正在执行的批处理文件的驱动器号。

如果这还不够,有一种通过使用Windows API的device management functions插入可移动驱动器时被通知的方法。您必须首先使用RegisterDeviceNotification()注册通知,然后在事件循环中处理WM_DEVICECHANGE消息。不幸的是,这需要一个事件循环,我不知道如何在python中轻松创建一个(除了从头开始创建它):here是一个示例消息循环,请注意,在你的情况下,你不需要创建一个窗口,只有一个消息循环)。

1

您可以尝试将该脚本编译为exe文件,并在运行脚本的USB密钥中创建自动运行文件。然后脚本完成它的事情。 对于分配Z:\字母的事情,我建议使用Win32Com(即使我不知道它是否可以处理这个问题),或者使用ctypes,这会让你控制windows dll。

相关问题