Je préférerais
- utiliser l'OFS au lieu de WMI
- ont les lecteurs dans une collection utilisable au lieu de une chaîne
- 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
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
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