http://www.perlmonks.org?node_id=48386

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

How do I get the list of mounted drives, and their labels, on a Win32 system?

Replies are listed 'Best First'.
(tye)Re: List of Mounted Drives on Win32
by tye (Sage) on Dec 27, 2000 at 10:34 UTC

    Recent versions of ActivePerl should include Win32API::File which knows how to find all mounted drives and can look up information about drives. It even comes with documentation.

    If you have problems with it, let us know. I can probably even whip up a 10-line script to do that for you tomorrow when I'm not rushing to bed. (:

    Well, my file copy is taking a while, so here goes:

    #!/usr/bin/perl -w use strict; use Win32API::File qw( getLogicalDrives GetVolumeInformation ); my @drives= getLogicalDrives(); foreach my $d ( @drives ) { my @x= (undef)x7; GetVolumeInformation( $d, @x ); print "$d $x[0] ($x[5])\n"; }
    Well, it isn't long on comments and I probably shouldn't recommend calling GetVolumeInformation() that way, but it mostly works for me.

            - tye (but my friends call me "Tye")
Re: List of Mounted Drives on Win32
by lolindrath (Scribe) on Dec 27, 2000 at 10:49 UTC
    Ok, I looked up some stuff and I found out that Win32::AdminMisc will do what you want if you have a WinNT system. Here's an example(Not tested).
    #!/usr/bin/perl -w use Win32::AdminMisc; my $drives = GetDrives( DRIVE_FIXED ); print $drives . "\n";

    The drive types are:
    DRIVE_FIXED - hard drive DRIVE_REMOVABLE - floppy DRIVE_REMOTE - network drive DRIVE_CDROM - cdrom DRIVE_RAMDISK - emulated drive in memory
    Some other functions that might help are:
    GetDriveType( DRIVE ) - returns the drives type GetDriveSpace ( DRIVE ) - returns the drives space GetVolumeInfo ( DRIVE ) - returns hash of drive info Element Desc ------------------ Volume Volume Label Serial Serial number of drive

    I tried this script after installing Win32::AdminMisc and it told me I needed WinNT. So I wrote this one.
    #!/usr/bin/perl -w for( my $i='a'; $i lt 'z'; $i++ ) { if ( -e "$i:/" ) { print "Drive $i exists\n"; } }

    This works under Win98 but it didn't pick up the A: drive because it didn't have any media in it. It also delayed while seeing if the A: drive had something in it. I also don't know how to find the volume label.
    I'm hoping you're on a WinNT system, then you're set.

    --=Lolindrath=--