diff -r c72c6eafadc6 -r f9fc2a3f8f70 common/tools/findPhysicalDrive.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/findPhysicalDrive.pl Tue Jan 26 12:13:01 2010 +0000 @@ -0,0 +1,51 @@ +#!perl -w +# +# Copyright (c) 2010 Symbian Foundation Ltd +# This component and the accompanying materials are made available +# under the terms of the License "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Symbian Foundation Ltd - initial contribution. +# +# Contributors: +# +# Description: +# Find and output the drive letter mapped to the physical volume with the +# largest amount of free space +# + +use strict; + +# Use Windows command to list physical volumes on the machine +# (No substed drives, or mapped network drives) +my @drives = map {chomp;$_} `echo list volume | diskpart`; + +my %drives; +for my $driveLine (@drives) +{ + # If this line of output is actually about a healthy HD volume... + if ($driveLine =~ m{^\s+Volume \d+\s+([A-Z]).*?(Partition|RAID-5)\s+\d+ [A-Z]+\s+Healthy} ) + { + my $letter = $1; + # Ignore the system drive + next if ($driveLine =~ m{System\s*$}); + + # Use dir to get the freespace (bytes) + my @bytesFree = grep { s{^.*?(\d+) bytes free\s*$}{$1} } map {chomp;$_} `cmd /c dir /-C $letter:\\`; + # Take the value from the bottom of the report + my $bytesFree = $bytesFree[-1]; + + # Record info for this volume + $drives{$letter} = $bytesFree; + } +} + +die "Unable to find any suitable drives at all\n" unless %drives; + +# Switch keys and values +%drives = reverse %drives; +# Sort by space to find the volume with the largest amount of space and print out the corresponding letter +print "$drives{(reverse sort keys %drives)[0]}:\n"; +