I think we've got some fine suggestions in this thread. I was thinking about another problem that could rear its ugly head: how do you find the drives that you want to do complete searches upon?
Windows drive letter assignments can move around for various reasons. So I hacked out this thing to get a listing of the drives on my system. You might find something like this helpful? I'm sure that there is some better / faster way to do this as this is slow, but it appears to work... Have fun if its helpful..
Update: As per testing from Ratazong, code works but you have to have admin rights to run fsutil. So I went searching for another way...
I don't think that the "vol" command requires any special rights to run as it appears in the standard list of command when you type "help" at the command prompt. Using the ouput is a bit trickier because you have to use information from both STDERR and STDOUT but from that info you can glean the 3 possibilities (a) device exists but no media in it, (b) this is something that looks like a hard drive, (c) no device exists. Code shown below. Not quite as much info as the fsutil code, but probably close enough for most purposes.
#!/usr/bin/perl -w
use strict;
#find Windows drive letters and type of drive
my $result = `fsutil fsinfo drives`;
my @letters = ($result =~ /[A-Z]{1}:/g);
my %drive_types;
foreach my $ltr (@letters)
{
my $result = `fsutil fsinfo drivetype $ltr`;
$result =~ s/\r\n$//;
my $type = ($result =~ /-\s+(.*)/)[0];
$drive_types{$ltr}=$type;
}
foreach my $drive (sort keys %drive_types)
{
print "$drive is a $drive_types{$drive}\n";
}
__END__
prints:
A: is a Removable Drive
C: is a Fixed Drive
D: is a CD-ROM Drive
E: is a Removable Drive
F: is a Removable Drive
H: is a Fixed Drive
I: is a Fixed Drive
my %drives;
foreach my $drive ('A'..'Z')
{
my $all = `vol $drive: 2>&1`;
next if ($all =~ m/system cannot find the path/);
$drives{$drive} = ($all =~ /^\s*(.*)/)[0]; #first line
}
foreach my $drive (sort keys %drives)
{
print "$drive: $drives{$drive}\n";
}
__END__
#prints...........
A: The device is not ready.
C: Volume in drive C is Main-Max
D: The device is not ready.
E: The device is not ready.
F: The device is not ready.
G: Volume in drive G is CIS27
H: Volume in drive H is Sata-1a
I: Volume in drive I is SATA-1B
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|