Domanda

Ho bisogno di ottenere i nomi delle directory dal percorso passato allo script Perl come argomento fase di esecuzione. Ecco il codice che sto usando:

$command ="cd $ARGV[0]";
system($command);

$command="dir /ad /b";
system($command);
@files=`$command`;

Ma ancora restituisce i nomi delle directory all'interno della directory da cui sto correndo questo script Perl. In breve, come faccio ad avere i nomi delle directory da una directory di destinazione il cui percorso è passato a questo script Perl?

È stato utile?

Soluzione

Questo dovrebbe funzionare anche
$command = "dir /ad /b $ARGV[0]" ;

Altri suggerimenti

a giudicare da quello che si sta cercando di fare nel tuo post domanda

$dir = $ARGV[0];
chdir($dir);
while(<*>){
 chomp;
 # check for directory;
 if ( -d $_ ) {
    print "$_\n" ;
 }
}

sulla riga di comando

c:\test> perl myscript.pl c:\test

Ci sono altri metodi di fare un elenco di directory. Vedere questi dalla documentazione

  1. perldoc -f opendir , perldoc -f readdir

  2. perldoc perlopentut

  3. perldoc -f glob

  4. perldoc perlfunc (guardare gli operatori per testare i file. -x, -d , -f etc)

Il tuo problema è che l'uso di "cd" "sistema" via non cambia la directory di lavoro del processo di perl. Per fare ciò, utilizzare la funzione "chdir":

chdir($ARGV[0]);

$command="dir /ad /b";
system($command);
@files=`$command`;

File :: DosGlob (core da prima perl v5.5) per evitare trucchi come file saltare i corrispondenti /^\./.

perl -MFile::DosGlob=glob -lwe "chdir 'test_dir'; print for grep {-d} <*>"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top