BrianTX
(Korg Regular)
2002-06-19 05:57 PM
Drive enumeration

Someone recently had a question about detecting which drive was the CD-ROM. Here is a script to do that:

code:
$fso = CreateObject("Scripting.FileSystemObject")
$drives = $fso.Drives
For each $drive in $drives
If $drive.DriveType = 4
$drive.DriveLetter " is a CD-ROM"
Endif
Next

To enumerate all drives, use:

code:
$fso = CreateObject("Scripting.FileSystemObject")
$drives = $fso.Drives
For each $drive in $drives
$Dtype = $drive.DriveType
Select
Case $Dtype = 0
$type = "Unknown"
Case $Dtype = 1
$type = "Removable"
Case $Dtype = 2
$type = "Fixed"
Case $Dtype = 3
$type = "Network"
Case $Dtype = 4
$type = "CD-ROM"
Case $Dtype = 5
$type = "RAM Disk"

EndSelect

"The " + $drive.driveletter + " drive is of type " + $type + "." ?
Next

Brian


cj
(MM club member)
2002-06-20 04:32 AM
Re: Drive enumeration

It's lunchtime here [Smile]

code:
$aTypes="Unknown","Removable","Fixed","Network","CD-ROM","RAM Disk"
for each $oDrive in CreateObject("Scripting.FileSystemObject").Drives
"The " $oDrive.DriveLetter " drive is of type " $aTypes[$oDrive.DriveType] "." ?
next

cj


Les
(KiX Master)
2002-06-20 04:43 AM
Re: Drive enumeration

In the spirit of one-upmanship...

KixGolf score = 211

Cool!


cj
(MM club member)
2002-06-20 05:35 AM
Re: Drive enumeration

KiXGolf? I am looking this up on the board... ahh. Well, let me improve the script then [Smile]

code:
$a="?","Rmvble","Fx'd","Net","CD","RAM"
for each $o in CreateObject("Scripting.FileSystemObject").Drives
$o.DriveLetter ":" $a[$o.DriveType] ?
next

[Big Grin]

cj


NTDOCAdministrator
(KiX Master)
2002-06-20 06:59 AM
Re: Drive enumeration

Good Job there cj [Big Grin]

BrianTX
(Korg Regular)
2002-06-20 03:45 PM
Re: Drive enumeration

Cool, CJ!

[Smile]

Brian


Radimus
(KiX Supporter)
2002-06-20 05:35 PM
Re: Drive enumeration

Ok.. here is part 2 and 3.

Make it better [Big Grin]

code:
break on

$DriveType="unknown","removable","fixed","network","cd-rom","ram"
$DrivePara="driveletter","drivetype","sharename","isready","filesystem","volumename","serialnumber"



$ld=DriveEnum(3)
? $ld

for each $drive in split($ld,",")
$info=DriveProp("$drive")
for $index = 0 to ubound($info)
? $DrivePara[$index] ": " $info[$index]
next
?
next
get $k
;******************************************************************
function DriveEnum(optional $filter)
dim $fso, $Drive
$fso=CreateObject("Scripting.FileSystemObject")
if $fso
for each $Drive in $fso.Drives
if instr($filter,$Drive.DriveType) or $filter=""
$DriveEnum=$DriveEnum+$Drive.DriveLetter+","
endif
next
$DriveEnum=left($DriveEnum,len($DriveEnum)-1)
$fso=""
endif
endfunction

;******************************************************************
function DriveProp($Drive)
dim $fso, $Drives, $list, $param, $property
dim $temparray[6]
$fso = createobject("scripting.filesystemobject")
if $fso
$Drives = $fso.drives
$list=0
for each $d in $drives
if $Drive=$d.driveletter
for $param = 0 to ubound($DrivePara)
$property=$DrivePara[$param]
$ret=execute('$$temparray[$param]=$$d.$property')
if $param=1 $temparray[$param]=$DriveType[$temparray[$param]] endif
next
$DriveProp=$temparray
endif
next
$fso=""
endif
exit @error
endfunction



[ 20 June 2002, 18:35: Message edited by: Radimus ]


Radimus
(KiX Supporter)
2002-06-20 07:15 PM
Re: Drive enumeration

even better...

function DriveEnum() will return the drive letters for all drives matching the types specified "" wil return all drives, "12" will return floppy and hard drives

function DriveProp($Drive) will return the properties of the specified drive as an array

code:
break on

$parameters="driveletter","drivetype","sharename","isready","filesystem","volumename","serialnumber"


$ld=DriveEnum(3)
? $ld

for each $drive in split($ld)
$info=DriveProp("$drive")
for $index = 0 to ubound($info)
? $parameters[$index] ": " $info[$index]
next
?
next

get $k
;******************************************************************
function DriveEnum(optional $filter)
dim $fso, $Drive

$fso=CreateObject("Scripting.FileSystemObject")
if $fso
for each $Drive in $fso.Drives
if instr($filter,$Drive.DriveType) or $filter=""
$DriveEnum=$DriveEnum+$Drive.DriveLetter+" "
endif
next
$DriveEnum=left($DriveEnum,len($DriveEnum)-1)
$fso=""
endif
endfunction

;******************************************************************
function DriveProp($Drive)
dim $fso, $Drives, $list, $param, $property
$DriveType="unknown","removable","fixed","network","cd-rom","ram"
$DrivePara="driveletter","drivetype","sharename","isready","filesystem","volumename","serialnumber"
dim $temparray[6]
$fso = createobject("scripting.filesystemobject")
if $fso
$D=$fso.getdrive("$Drive")
for $param = 0 to ubound($DrivePara)
$property=$DrivePara[$param]
$ret=execute('$$temparray[$param]=$$d.$property')
if $param=1 $temparray[$param]=$DriveType[$temparray[$param]] endif
next
$DriveProp=$temparray
$fso=""
endif
exit @error
endfunction



[ 20 June 2002, 19:38: Message edited by: Radimus ]


BrianTX
(Korg Regular)
2002-06-20 08:46 PM
Re: Drive enumeration

Cool. glad to see this led to a neato UDF! [Smile]

Brian