Как я могу получить букву диска в Perl? - PullRequest
2 голосов
/ 15 декабря 2008

Мне нужно получить букву диска в Perl. Может ли кто-нибудь любезно помочь мне? $ ENV {SYSTEMDRIVE} не работает; это дает мне реальную логическую букву, а не букву.

Ответы [ 3 ]

3 голосов
/ 15 декабря 2008

Вы ищете Win32 :: FileOp ?

2 голосов
/ 15 декабря 2008

спасибо всем, наконец, я решил это намного более простым способом - с помощью команды getcwd получить текущий рабочий каталог, а затем я использовал первые две буквы из его вывода - так просто :-)

use Cwd;

my $driveletter = substr(getcwd, 0, 2); 
0 голосов
/ 15 декабря 2008

Если вы хотите сделать это самостоятельно, вы можете захватить выходные данные команды 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:\

в моей системе, которая имеет только один замененный диск.

...