2011-08-11 4 views
1

すべてのリムーバブルドライブの文字を変数に格納するVbスクリプトがあります。フロッピードライブとUSBドライブの両方が含まれていることが分かっているので、私はVBScriptを呼び出すことができるソフトウェアを使用していUSBとフロッピードライブの文字をVBScriptで検出する

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 

:別の変数に格納するUSB​​ドライブ変数の文字やフロッピーもの、にここで

はスクリプトです。しかし、それは私が投稿したようなものだけをサポートします。だから私は何を話すことができますか?

ありがとうございました。

答えて

2

objDisk.MediaTypeを確認してください。 HereにはMediaTypesのリストがあります。一見すると、MediaType 1〜10は「通常の」フロッピーを示します。私の(仮想)マシンのクイックチェックで、USBドライブがNullのMediaTypeを示していた(Unknownの場合もゼロではない)ので、注意が必要です。 2番目の一見(注意深い話題):最も定義されたメディアタイプはフロッピー(そのうちのいくつかはエキゾチックなもの)を識別します。ところで - 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:\ 

USBDriveのMediaTypeが奇妙な事故かもしれません。私は、 "Select Case True"の制御構造を使ってMediaTypeの評価を簡単にしてみようとしました。 VBScriptは、最初の真となるまでCasesの条件をテストし、対応するステートメントを実行し、End Selectに '中断'します。特別なケースを追加したり、ケースを並べ替えるのは簡単です。最初の位置にIsNullチェックを入れてください。

+0

こんにちはEkkehard.Horner、うまくいった男:) Huuuuuuuuge Thanksありがとう。それは正常に動作しています。あなたは素晴らしいです:)私はあなたのメールをお願いしますか? – Nofuzy

2

また、詳細については、このクエリ

set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DriveType=2") 

を試してみてくださいthisリンクを確認することができます。運が良ければ

関連する問題