我需要在 Perl 中获得替换的驱动器号。任何人都可以帮助我吗?$ENV{SYSTEMDRIVE} 不起作用;它给了我真正的逻辑驱动器号,而不是替代的驱动器号。
Dungeo
问问题
3551 次
4 回答
3
您在寻找Win32::FileOp吗?
于 2008-12-15T07:42:20.347 回答
2
perl -e 'use Cwd; print( substr(getcwd(),10,1 )) ' # prints 10th char.
于 2008-12-15T09:43:17.483 回答
0
如果你想自己做,你可以捕获 subst 命令的输出并处理它,因为它输出所有当前替换的驱动器。
SUBST [drive1: [drive2:]path]
SUBST drive1: /D
drive1: Specifies a virtual drive to which you want to assign a path.
[drive2:]path Specifies a physical drive and path you want to assign to
a virtual drive.
/D Deletes a substituted (virtual) drive.
Type SUBST with no parameters to display a list of current virtual drives.
C:\Documents and Settings\Administrator\My Documents>subst r: c:\bin
C:\Documents and Settings\Administrator\My Documents>subst
R:\: => C:\bin
为此,您需要一个函数来返回替换后的输出,如下所示:
sub get_drive {
my $drv = shift;
my $ln;
$drv = substr($drv,0,1);
open (IN, "subst |");
while ($ln = <IN>) {
chomp ($ln);
if ((substr($ln,0,1) eq $drv) && (substr($ln,1,6) eq ":\\: =>")) {
close (IN);
return substr($ln,8);
}
}
close (IN);
return $drv . ":\\";
}
print get_drive ("R:") . "\n";
print get_drive ("S:") . "\n";
这输出:
C:\bin
S:\
在我只有一个替代驱动器的系统上。
于 2008-12-15T07:45:39.607 回答
0
(我知道,响应真的很晚)但是就在今天,我需要这样的东西,而 Win32::FileOp 无法在我的系统上编译。所以我调用了 subst 并用“真实”替换了虚拟驱动器;片段如下:
use strict;
use Data::Dumper;
use feature 'say';
my $DB=1;
$Data::Dumper::Indent = 1;
$Data::Dumper::Terse = 1;
my %Virt;
exit main();
sub main
{
my $rtn;
my (@args) = @_;
open CMD,"subst|" or die "can't run subst command";
while (<CMD>) {
chomp;
my ($drv, $path) = split(/:\\: => /);
$Virt{$drv} = $path;
}
my %rset; # result set
while (my ($d,$p) = each %Virt) {
$rset{$d} = expand($p);
}
#D say Dumper rset => \%rset;
return $rtn;
}
# recursive call if expanded path has another 'virtual' drive
sub expand
{
my ($loc) = @_;
my $rtn = undef;
my ($drv, $path) = split(/:\\/, $loc);
if ($a = $Virt{$drv}) {
#D say "$a $path";
$rtn = "$a\\$path";
$rtn = expand($rtn);
} else {
#D say "$drv $path";
$rtn = "$drv:\\$path";
}
return $rtn;
}
注意:我使用 #D 来进行 quickNdirty 调试语句
我将此测试到三个级别,即 w: subst to x:, x: subst to y: 和 y: subst to c:
于 2019-08-09T23:44:20.920 回答