2011-08-06 17 views
2

ローカルのハードドライブ文字を検出するVBScriptがあり、そこにいくつかの場所が保存されます。今、私はそれからWindowsドライブを削除したいと思います。私は最初にすべてのローカルハードドライブを見つけてから、Windowsのドライブを検出してローカルハードドライブのリストから削除し、それらをターゲット変数に格納することを意味します。どうやってするの?ここでVBScript経由でのWindowsドライブの検出

は、VBScriptです:

strComputer = "." 
Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 

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

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

おかげで、

答えて

4

は私が

  1. FSOを使用する代わりに、WMI
  2. 使用可能なコレクション内のドライブを持っている代わりにすることを好みます文字列
  3. remの代わりにシステムドライブをコレクションに入れない

    Dim goFS  : Set goFS  = CreateObject("Scripting.FileSystemObject") 
        Dim dicDTypes : Set dicDTypes = buildDicMKV(_ 
        vbTextCompare, Split("0 1 2 3 4 5"), Split("Unknown Removable Fixed Network CD-ROM RAM-Disk") _ 
    ) 
        Dim dicDrives : Set dicDrives = CreateObject("Scripting.Dictionary") 
        Dim oWSH  : Set oWSH  = CreateObject("WScript.Shell") 
        Dim sSysDir : sSysDir  = oWSH.Environment("PROCESS")("SYSTEMROOT") 
        WScript.Echo "sSysDir", sSysDir 
        Dim sSysDrive : sSysDrive  = goFS.GetDriveName(sSysDir) 
        WScript.Echo "sSysDrive", sSysDrive 
        Dim sSDLetter : sSDLetter  = Left(sSysDrive, 1) 
        WScript.Echo "sSDLetter", sSDLetter 
        Dim oDrive 
        For Each oDrive In goFS.Drives 
         WScript.Echo oDrive.DriveLetter, oDrive.DriveType, dicDTypes(CStr(oDrive.DriveType)) 
         If  "Fixed" = dicDTypes(CStr(oDrive.DriveType)) _ 
         And sSDLetter <> oDrive.DriveLetter Then 
         Set dicDrives(oDrive.DriveLetter) = oDrive 
         End If 
        Next  
        WScript.Echo "------------------" 
        Dim sDrive 
        For Each sDrive In dicDrives.Keys 
         Set oDrive = dicDrives(sDrive) 
         WScript.Echo oDrive.DriveLetter, oDrive.DriveType, dicDTypes(CStr(oDrive.DriveType)) 
        Next  
    
    Function buildDicMKV(vbCompMode, aKeys, aValues) 
        Set buildDicMKV = CreateObject("Scripting.Dictionary") 
    ' compare 
    '  Optional. If provided, compare is a value representing the comparison mode. 
    '  Acceptable values are 0 (Binary), 1 (Text), 2 (Database). Values greater than 
    '  2 can be used to refer to comparisons using specific Locale IDs (LCID). 
        buildDicMKV.CompareMode = vbCompMode 
        Dim nIdx 
        For nIdx = 0 To UBound(aKeys) 
         buildDicMKV.Add aKeys(nIdx), aValues(nIdx) 
        Next  
    End Function 
    

    出力: それ以降の

のでoving

sSysDir C:\WINDOWS 
sSysDrive C: 
sSDLetter C 
A 1 Removable 
C 2 Fixed 
E 3 Network 
M 3 Network 
X 2 Fixed 
------------------ 
X 2 Fixed 

を追加しました:

を:

私はあなたがそれを自分で行う、とにかくすることができないことを疑います

Dim sSysDrive : sSysDrive = CreateObject("Scripting.FileSystemObject") _ 
     .GetDriveName( _ 
      CreateObject("WScript.Shell").Environment("PROCESS")("SYSTEMROOT")) 
    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 drives : drives = "" 
    Dim objDisk 
    For Each objDisk in colDisks 
     If  objDisk.DriveType = 3 _ 
     And objDisk.DeviceID <> sSysDrive Then 
     If drives > "" Then 
      drives = drives & ";" 
     End If 
     drives = drives & objDisk.DeviceID & "\" 
     End if 
    Next 
    WScript.Echo drives 
+0

こんにちはEkkehard.Horner、お返事ありがとうございます。しかし、私は自分のコードを編集する必要があります。私は別のコードを使用することはできません。私は私が言ったように私はVBcriptを呼び出すことができるソフトウェアを使用しています。私のコードを編集する手助けはできますか? – Nofuzy

+0

こんにちはEkkehard.Horner、veryyyyyyyyyyyyyyyyyyyyyyyyありがとうございました。すばらしいです。あなたの追加された部分はうまく働いているので、この質問はあなたによって解決されます:)もう一度ありがとう... – Nofuzy

関連する問題