Wie kann ich ein Verzeichnis erhalten von DOS in Perl-Eintrag?
-
19-09-2019 - |
Frage
Ich muß Verzeichnisnamen aus dem Pfad zu dem Perl-Skript als Laufzeit Argument übergeben bekommen. Hier ist der Code verwende ich:
$command ="cd $ARGV[0]";
system($command);
$command="dir /ad /b";
system($command);
@files=`$command`;
Aber es gibt immer noch die Verzeichnisnamen innerhalb des Verzeichnisses, aus dem ich diesen Perl-Skript renne. Kurz gesagt, wie bekomme ich die Verzeichnisnamen von einem Zielverzeichnis, dessen Pfad zu diesem Perl-Skript übergeben wird?
Lösung
Dies sollte auch funktionieren
$command = "dir /ad /b $ARGV[0]" ;
Andere Tipps
urteilen, was Sie versuchen, in Ihrer Frage Post zu tun
$dir = $ARGV[0];
chdir($dir);
while(<*>){
chomp;
# check for directory;
if ( -d $_ ) {
print "$_\n" ;
}
}
auf der Kommandozeile
c:\test> perl myscript.pl c:\test
Es gibt andere Methoden, um eine Auflistung des Verzeichnisses zu tun. Sehen Sie diese von der Dokumentation
-
perldoc perlfunc
(siehe Operatoren für Dateien zu testen.-x
,-d
,-f
usw.)
Ihr Problem ist, dass „cd“ über „System“ läuft nicht das Arbeitsverzeichnis des Perl-Prozesses ändern. Um dies zu tun, verwenden Sie die "chdir" Funktion:
chdir($ARGV[0]);
$command="dir /ad /b";
system($command);
@files=`$command`;
File :: DosGlob (core da vor perl v5.5) zu vermeiden Fallstricke wie das Überspringen von Dateien /^\./.
perl -MFile::DosGlob=glob -lwe "chdir 'test_dir'; print for grep {-d} <*>"