Comment puis-je obtenir un répertoire de la liste DOS en Perl?
-
19-09-2019 - |
Question
Je dois obtenir les noms de répertoire à partir du chemin passé au script Perl comme argument de l'exécution. Voici le code que je utilise:
$command ="cd $ARGV[0]";
system($command);
$command="dir /ad /b";
system($command);
@files=`$command`;
Mais elle retourne toujours les noms de répertoire dans le répertoire à partir duquel je suis en cours d'exécution de ce script Perl. En bref, comment puis-je obtenir les noms de répertoire à partir d'un répertoire cible dont le chemin est transmis à ce script Perl?
La solution
Cela devrait également travailler
$command = "dir /ad /b $ARGV[0]" ;
Autres conseils
en juger par ce que vous essayez de faire dans votre poste de question
$dir = $ARGV[0];
chdir($dir);
while(<*>){
chomp;
# check for directory;
if ( -d $_ ) {
print "$_\n" ;
}
}
sur la ligne de commande
c:\test> perl myscript.pl c:\test
Il existe d'autres méthodes de faire une liste de répertoire. Voir ces documents de
-
perldoc perlfunc
(voir les opérateurs pour tester des fichiers.-x
,-d
,-f
etc)
Votre problème est que la course « cd » via « système » ne change pas le répertoire de travail du processus de Perl. Pour ce faire, utilisez la fonction "chdir":
chdir($ARGV[0]);
$command="dir /ad /b";
system($command);
@files=`$command`;
perl -MFile::DosGlob=glob -lwe "chdir 'test_dir'; print for grep {-d} <*>"