¿Cómo puedo obtener un listado del directorio de DOS en Perl?
-
19-09-2019 - |
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?
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
-
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} <*>"