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?

War es hilfreich?

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

  1. perldoc -f opendir , perldoc -f readdir

  2. perldoc perlopentut

  3. perldoc -f glob

  4. 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} <*>"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top