首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过VBScript检测U盘和软盘驱动器的字母

通过VBScript检测U盘和软盘驱动器的字母
EN

Stack Overflow用户
提问于 2011-08-11 16:06:55
回答 2查看 5.8K关注 0票数 1

我有一个Vb脚本,它将所有可移动驱动器的字母存储到一个变量中,因为你知道它包含软盘驱动器和USB驱动器,我想将它们分开,我的意思是我想将USB驱动器的字母存储在一个变量中,将软盘驱动器的字母存储到另一个变量中。

下面是脚本:

代码语言:javascript
复制
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colDisks = objWMIService.ExecQuery _
    ("Select * from Win32_LogicalDisk")

Removable = ""
For Each objDisk in colDisks
  if objDisk.DriveType = 2 then
    if Removable > "" then
      Removable = Removable & ";"
    end if
    Removable = Removable & objDisk.DeviceID & "\"
  end if
Next

我使用的是一个可以调用VBScript的软件。但它只支持我所发布的某种类型的它们。那么我怎么才能做到我所说的呢?

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-11 16:48:32

检查objDisk.MediaType。Here你会发现一个MediaTypes的列表;乍一看U盘1...10表示“正常”软盘;在我的(虚拟机)上快速检查,一个MediaType驱动器显示MediaType为空(对于未知,甚至不是0),所以你要小心。再看一眼(说到carefull):大多数已定义的媒体类型都会识别软盘(其中一些是奇特的)。顺便说一句,USB软盘驱动器呢?

因为我不能在“真正的”计算机上测试,所以你必须仔细检查以下代码:

代码语言:javascript
复制
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

我的输出是:

代码语言:javascript
复制
A: has MediaType 5  - surely some kind of floppy.
F: has MediaType null - assuming USB Drive.
Removable: A:\;F:\
Floppy:    A:\
USBDrive:  F:\

我的USBDrive的空MediaType可能是一个奇怪的意外。我试图通过使用"Select Case True“控制结构来简化MediaType的计算。VBScript将测试情况的条件,直到第一个为真的情况,执行相应的语句,并'break‘到End Select。因此添加特殊情况和/或重新排序情况很简单-只需将IsNull检查放在第一位即可。

票数 2
EN

Stack Overflow用户

发布于 2013-08-15 02:21:51

您也可以尝试此查询

代码语言:javascript
复制
set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DriveType=2")

有关更多详细信息,请查看this链接。祝你好运

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7022696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档