Pergunta

Eu preciso para obter nomes de diretório do caminho passado para o script Perl como argumento tempo de execução. Aqui está o código que estou usando:

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

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

Mas ainda retorna os nomes de diretório dentro do diretório a partir do qual eu estou correndo este script Perl. Em suma, como faço para obter os nomes de diretório a partir de um diretório de destino cujo caminho é passado para este script Perl?

Foi útil?

Solução

Isso também deve funcionar
$command = "dir /ad /b $ARGV[0]" ;

Outras dicas

a julgar o que você está tentando fazer em seu post questão

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

na linha de comando

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

Existem outros métodos de fazer uma listagem de diretório. Veja estes de documentação

  1. perldoc -f opendir , perldoc -f readdir

  2. perldoc perlopentut

  3. perldoc -f glob

  4. perldoc perlfunc (olhada operadores para testar arquivos. -x, -d , -f etc)

Seu problema é que a execução de "cd" via "sistema" não muda o diretório de trabalho do processo de perl. Para fazer isso, use a função "chdir":

chdir($ARGV[0]);

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

File :: DosGlob (core desde antes perl v5.5) para gotchas evitar como pular arquivos correspondentes /^\./.

perl -MFile::DosGlob=glob -lwe "chdir 'test_dir'; print for grep {-d} <*>"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top