Pregunta

Necesito conseguir los nombres de directorio de la ruta se pasa al script de Perl como argumento de tiempo de ejecución. Aquí está el código que estoy usando:

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

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

Pero todavía devuelve los nombres de directorio dentro del directorio desde el que estoy ejecutando este script Perl. En pocas palabras, ¿cómo consigo los nombres de directorio de un directorio de destino cuyo camino se pasa a este script Perl?

¿Fue útil?

Solución

Esto también debería funcionar
$command = "dir /ad /b $ARGV[0]" ;

Otros consejos

a juzgar por lo que estamos tratando de hacer en tu mensaje en cuestión

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

en la línea de comandos

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

Existen otros métodos de hacer una lista de directorio. Vea éstas a partir de la documentación

  1. perldoc -f opendir , perldoc -f readdir

  2. perldoc perlopentut

  3. perldoc -f glob

  4. perldoc perlfunc (mirar a los operadores para probar archivos. -x, -d , -f etc)

Su problema es que la ejecución de "CD" "sistema" a través no cambia el directorio de trabajo del proceso de Perl. Para ello, utilice la función "chdir":

chdir($ARGV[0]);

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

Archivo :: DosGlob (núcleo desde antes de v5.5 Perl) para evitar trampas como archivos saltarse emparejan /^\./.

perl -MFile::DosGlob=glob -lwe "chdir 'test_dir'; print for grep {-d} <*>"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top