首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取USB存储驱动器字母VBSCript

获取USB存储驱动器字母VBSCript
EN

Stack Overflow用户
提问于 2015-02-17 07:31:28
回答 2查看 5K关注 0票数 1

这是一个显示连接的USB存储设备的列表。

代码语言:javascript
复制
On Error Resume Next
    strComputer = "."
    Dim oFSO, oDrive
    Set oFSO = WScript.CreateObject("Scripting.FileSystemObject")
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive WHERE InterfaceType = 'USB'")
    For Each objItem in colItems
      Wscript.Echo objItem.Caption
    Next

我需要得到驱动器的字母,但是上面的代码是不可能的。colItems没有关于驱动器字母的属性。我可以使用另一个支持驱动器字母的脚本,如下所示:

代码语言:javascript
复制
Dim oFSO, oDrive
Const USBDRIVE=1
Set oFSO = WScript.CreateObject("Scripting.FileSystemObject")
For Each oDrive In oFSO.Drives
If oDrive.DriveType = USBDRIVE And oDrive.DriveLetter <> "A" Then
WScript.Echo oDrive.DriveLetter
End If
Next

但是在这个脚本中,我不能使用标题属性,因为它不受支持:(我需要结合这两个脚本来获取每个USB存储标题和字母)。我怎么能这么做?有可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-17 08:45:13

试试下面的代码:

代码语言:javascript
复制
'Show drive letters associated with each
ComputerName = "."
Set wmiServices  = GetObject ( _
    "winmgmts:{impersonationLevel=Impersonate}!//" _
    & ComputerName)
' Get physical disk drive
Set wmiDiskDrives =  wmiServices.ExecQuery ( "SELECT Caption, DeviceID FROM Win32_DiskDrive WHERE InterfaceType = 'USB'")

For Each wmiDiskDrive In wmiDiskDrives
   ' x = wmiDiskDrive.Caption & Vbtab & " " & wmiDiskDrive.DeviceID 
    'Use the disk drive device id to
    ' find associated partition
    query = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" & wmiDiskDrive.DeviceID & "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition"    
    Set wmiDiskPartitions = wmiServices.ExecQuery(query)

    For Each wmiDiskPartition In wmiDiskPartitions
        'Use partition device id to find logical disk
        Set wmiLogicalDisks = wmiServices.ExecQuery ("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" _
             & wmiDiskPartition.DeviceID & "'} WHERE AssocClass = Win32_LogicalDiskToPartition") 
x = ""
        For Each wmiLogicalDisk In wmiLogicalDisks
            x = x & wmiDiskDrive.Caption & " " & wmiDiskPartition.DeviceID & " = " & wmiLogicalDisk.DeviceID
Wscript.echo x

        Next      
    Next
Next
票数 3
EN

Stack Overflow用户

发布于 2015-02-17 09:44:37

从下一个脚本中派生出您想要的输出(根据需要进行注释,并具有不言自明的输出)。写成用wscriptcscript主机启动)

代码语言:javascript
复制
' VB Script Document 28556806.vbs
option explicit
On Error Goto 0

Dim ComputerName, strRslt, strQuery
Dim wmiServices _
  , wmiDiskDrives, wmiDiskDrive _
  , wmiDiskPartitions, wmiDiskPartition _
  , wmiLogicalDisks, wmiLogicalDisk

strRslt = Wscript.ScriptName _
    & vbTab & "Drive letters associated with disk drives" _ 

ComputerName = "."

Set wmiServices  = GetObject ( _
    "winmgmts:{impersonationLevel=Impersonate}!//" _
    & ComputerName)
' Get physical disk drive
Set wmiDiskDrives =  wmiServices.ExecQuery ( _
    "SELECT Caption, DeviceID, InterfaceType FROM Win32_DiskDrive")

For Each wmiDiskDrive In wmiDiskDrives
    strRslt = strRslt & vbNewLine
    strRslt = strRslt & vbNewLine _
      & "DiskDrive.Caption = " & wmiDiskDrive.Caption _ 
      & vbNewLine & "DiskDrive.InterfaceType = " _
          & wmiDiskDrive.InterfaceType

    'Use the disk drive device id to find associated partition
    strQuery = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" _
        & wmiDiskDrive.DeviceID _
        & "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition"    
    Set wmiDiskPartitions = wmiServices.ExecQuery(strQuery)

    For Each wmiDiskPartition In wmiDiskPartitions
        'Use partition device id to find logical disk
        Set wmiLogicalDisks = wmiServices.ExecQuery _
            ("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" _
             & wmiDiskPartition.DeviceID _
             & "'} WHERE AssocClass = Win32_LogicalDiskToPartition") 

        For Each wmiLogicalDisk In wmiLogicalDisks
            strRslt = strRslt _
              & vbNewLine & "DiskDrive.Caption = " _
                  & wmiDiskDrive.Caption _
              & vbNewLine & "DiskDrive.DeviceID = " _
                  & wmiDiskDrive.DeviceID _
              & vbNewLine & "DiskPartition.Partition = " _
                  & wmiDiskPartition.DeviceID _
              & vbNewLine & "LogicalDisk.DeviceID = " _
                  & wmiLogicalDisk.DeviceID 
        Next      
    Next
Next

WScript.Echo strRslt

我想出了更广泛的答案,以便更容易地在附加的USB驱动器中做出决定;在计算机系统硬件类中可以找到适当的属性。

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

https://stackoverflow.com/questions/28556806

复制
相关文章

相似问题

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