2011-08-06 1 views
2

J'ai un VBScript qui détecte les lettres du disque dur local et il va les stocker où. Maintenant, je veux supprimer le lecteur Windows de celui-ci. Je veux dire d'abord qu'il trouve tous les disques durs locaux, puis détecte Windows Drive et le retirer de la liste des disques durs locaux, puis les stocker dans la variable cible. Comment faire?Détection de Windows Drive via VBScript

Voici le 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 

Merci,

Répondre

4

Je préférerais

  1. utiliser l'OFS au lieu de WMI
  2. ont les lecteurs dans une collection utilisable au lieu de une chaîne
  3. ne pas mettre le lecteur système dans la collection au lieu de rem Oving plus tard

Alors:

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 

sortie:

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 

AJOUTÉE:

Je doute que vous ne pouvez pas le faire vous-même, mais de toute façon:

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

Salut Ekkehard.Horner, Merci pour votre réponse. Mais j'ai juste besoin d'éditer mon code. Je ne peux pas utiliser un autre code. J'utilise un logiciel que je peux appeler un VBcript comme je l'ai dit. Alors pouvez-vous m'aider à éditer mon code? – Nofuzy

+0

Salut Ekkehard.Horner, Merci veryyyyyyyyyyyyyyyyyyyyyyyyyyy beaucoup. Génial. Votre partie ajoutée fonctionne bien, donc cette question est résolue par vous :) Merci encore ... – Nofuzy

Questions connexes