Проверьте objDisk.MediaType. Здесь вы найдете список MediaTypes;на первый взгляд MediaType 1 ... 10 указывает на «нормальную» дискету;При быстрой проверке моей (виртуальной) машины на USB-накопителе был указан MediaType of Null (даже ноль для неизвестного), так что вам придется быть осторожным.На второй взгляд (речь идет об осторожности): большинство определенных типов носителей идентифицируют дискеты (некоторые из них экзотические).Кстати, как насчет USB-дисководов гибких дисков?
Поскольку я не могу проверить на «реальном» компьютере, вам придется дважды проверить следующий код:
Const cnRemovableDisk = 2
Const cnMTypeUnknown = 0
Const cnMTypeNoFloppy = 11
Const cnMTypeFixedHD = 12
Dim strComputer : strComputer = "."
Dim objWMIService : Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Dim colDisks : Set colDisks = objWMIService.ExecQuery _
("Select * from Win32_LogicalDisk")
Dim Removable : Removable = ""
Dim Floppy : Floppy = ""
Dim USBDrive : USBDrive = ""
Dim objDisk
For Each objDisk in colDisks
If objDisk.DriveType = cnRemovableDisk Then
Removable = Removable & ";" & objDisk.DeviceID & "\"
Select Case True
Case IsNull( objDisk.MediaType )
WScript.Echo objDisk.DeviceID, "has MediaType null - assuming USB Drive."
USBDrive = USBDrive & ";" & objDisk.DeviceID & "\"
Case objDisk.MediaType = cnMTypeNoFloppy
WScript.Echo objDisk.DeviceID, "has MediaType 11 - assuming USB Drive."
USBDrive = USBDrive & ";" & objDisk.DeviceID & "\"
Case objDisk.MediaType = cnMTypeUnknown
WScript.Echo objDisk.DeviceID, "has MediaType 0 - assuming USB Drive."
USBDrive = USBDrive & ";" & objDisk.DeviceID & "\"
Case objDisk.MediaType = cnMTypeFixedHD
WScript.Echo objDisk.DeviceID, "has MediaType 12 - how can this happen?"
Case Else
WScript.Echo objDisk.DeviceID, "has MediaType", objDisk.MediaType, " - surely some kind of floppy."
Floppy = Floppy & ";" & objDisk.DeviceID & "\"
End Select
End If
Next
Removable = Mid( Removable, 2 )
Floppy = Mid( Floppy , 2 )
USBDrive = Mid( USBDrive , 2 )
WScript.Echo "Removable:", Removable
WScript.Echo "Floppy: ", Floppy
WScript.Echo "USBDrive: ", USBDrive
мой вывод:
A: has MediaType 5 - surely some kind of floppy.
F: has MediaType null - assuming USB Drive.
Removable: A:\;F:\
Floppy: A:\
USBDrive: F:\
Нулевой MediaType моего USBDrive может быть странным несчастным случаем.Я попытался упростить процесс оценки MediaType, используя управляющую структуру Select Case True .VBScript будет проверять условия дел до первого истинного условия, выполнять соответствующие операторы и «прерывать» до выбора конца.Таким образом, добавление особых случаев и / или переупорядочивание случаев является простым - просто сохраните проверку IsNull на первой позиции.