我正在尝试写下一个perl脚本,该脚本将能够区分我的驱动器的不同标签到特定的驱动器,然后在该特定驱动器中做某事。
我正在Windows XP计算机上运行Active Perl 5.16.3.1603。
这是我写的:
use strict;
$_ = `fsutil fsinfo drives`;
my @drives = split;
my @labels;
for (@drives)
{
push @labels, `label $_`;
}
for (@labels)
{
print "$_n";
}
最后的循环是打印检查。
我什么也没得到。我试图以另一种方式检查它:
use strict;
$_ = `fsutil fsinfo drives`;
print;
print "n";
print join "n", split;
我的结果是:
Drives: C: D: E: G:
Drives:
C: D: E: G:
为什么分裂行为不是应该的方式?
我尝试做split " "
,split / /
和split /s+/
。
他们最终都以相同的输出。
如果有人知道为什么会发生以及如何使它消失,请分享。
预先感谢。
a hexdump- davido
建议00000000h: 0D 0A 44 72 69 76 65 73 3A 20 41 3A 5C 00 43 3A ; ..Drives: A:.C:
00000010h: 5C 00 44 3A 5C 00 45 3A 5C 00 4D 3A 5C 00 0D 0A ; .D:.E:.M:...
表明您获得的(领先/尾随CRLF)和其他(00)比您预期的(在Win XP下进行测试)。
测试。因此,要获取驱动器字母的列表,正则正则表达式可能是更好的方法:
$ my $res = `fsutil fsinfo drives`;
Drives: A: C: D: E: M:
$ $res =~ /bw:/g;
$ARRAY1 = [
'A:',
'C:',
'D:',
'E:',
'M:'
];
更新WRT评论:
- Hexdump可让您清楚地了解二进制数据;我用它来显示您称为FSUTIL时真正得到的。
- 我提到了XP,因为我不能排除FSUTIL在其他版本的Windows上返回带有不同定系数的字符串。
- 通过使用剪切所需内容的正则表达式(驱动器字母),而不是潜伏在两者之间的内容,我尝试提出一个解决方案,即使盖茨先生将零更改为空格,标签或",",。
- 您能提供一个链接,将"其他东西"的含义解释给初学者?