2013-03-28 42 views
0

我正在使用下面的代码来获取驱动器,可用空间和驱动器的总空间。Perl:如何将WMIC输出捕获到变量

my @pnames = `wmic /node:"IP" /user:"UserName" /password:"password" LogicalDisk Where "DeviceID='H:'" Get DeviceID,FreeSpace,Size`; 

print "@pnames"; 

上述命令的输出显示如下:

DeviceID FreeSpace Size 

H:  51664236544 214753832960 

我如何读DeviceID$DriveName变量,FreeSpace$FreeSpaceOnDrive变量和Size$TotalSpace变量?

在此先感谢。

+0

替代方法:[DBD :: WMI(http://search.cpan.org/perldoc? DBD :: WMI) – ikegami 2013-03-28 10:21:50

回答

0

捕获在标量变量的输出,并与正则表达式检查它,这样的事情:

my ($DriveName, $FreeSpaceOnDrive, $TotalSpace); 
my $pnames = `wmic /node:"IP" /user:"UserName" /password:"password" LogicalDisk Where "DeviceID='H:'" Get DeviceID,FreeSpace,Size`; 

if($pnames =~ m!\s+([\w:]+)\s+(\d+)\s+(\d+)!) { 
    ($DriveName, $FreeSpaceOnDrive, $TotalSpace) = ($1, $2, $3); 
} 
1

可能最好使用split来获取这些值。

我不清楚是否真的在你的输出中的头之后一个空行,但如果是这样,那么你需要

my ($dev_id, $free_space, $size) = split ' ', $pnames[2]; 

如果没有空行,然后只需改变split$pnames[1]工作代替。

+0

感谢您的解决方案。它正在工作。 – user1752602 2013-03-28 10:30:30