9 Replies Latest reply: Nov 12, 2012 4:12 PM by Aderlan Rodrigues RSS

    Percorrer diretórios e suas subpastas criando uma tabela com os arquivos

      Pessoal boa tarde,

       

      Tenho um diretório em rede com vários subpastas, exemplo:

       

      \\BRITJ\ARQUIVOS

      Subpastas:

      2012

      JAN02J012

      JAN032012

      .....

      OCT31012

       

      Nas subpastas separadas por dia tenho diversos arquivos de diferentes extensões  (*.pdf, *.exe, *.zip, *.rar).

       

      Inicialmente preciso listar em um tabela (in line), todos os arquivos de extensões *.pdf, *.xls, alguémjá precisou de algo parecido, sugere algo?

       

      PS: Preciso montar um script que percora o diretório \\BRITJ\ARQUIVOS\2012 e percorra todas as subpastas, relacionando apenas os arquivos de extensões *.pdf, *.xls conforme abaixo:

       

      ID          Diretorio                                                       Arquivo

      01         \\BRITJ\ARQUIVOS\2012\JAN02J012              100.xls

      02         \\BRITJ\ARQUIVOS\2012\JAN02J012              100.pdf

      03         \\BRITJ\ARQUIVOS\2012\JAN02J012              101.xls

      04         \\BRITJ\ARQUIVOS\2012\JAN02J012              101.pdf

       

      Sugestões?

        • Re: Percorrer diretórios e suas subpastas criando uma tabela com os arquivos
          Erich Shiino

          Weslley,

          Você pode usar este trecho que faz parte do help da estrutura do for each...

          Já tem a maior parte do que precisa lá. Precisa ajustar alguns parâmetros:

           

          Coloque a sub e chamada da sub no script.

          Ajuste o diretório inicial na última linha ( call dodir('\\BRITJ\ARQUIVOS' ))  e acerte as extensões que precisa:


          SUB DoDir (Root)

          FOR Each Ext in 'qvw', 'qva', 'qvo', 'qvs'

          FOR Each File in filelist (Root&' \*.' &Ext)

          LOAD

          '$(File)' as Name,

          FileSize( '$(File)' ) as Size,

          FileTime( '$(File)' ) as FileTime

          autogenerate 1;

          NEXT File

          NEXT Ext

          FOR Each Dir in dirlist (Root&' \*' )

          call DoDir (Dir)

          NEXT Dir

          ENDSUB

          CALL DoDir ('C:')

           

           

           

          Abs,

           

          Erich

            • Re: Percorrer diretórios e suas subpastas criando uma tabela com os arquivos

              Erich boa tarde, obrigado pela dica.....

               

              Tirando com base o que temos na documentação, estou testando o codigo abaixo e a variavel File vem sempre vazia.

               

              Mesmo existindo o arquivo 'C:teste.qvw'

               

              Pode me auxiliar informando no código abaixo o que está errado, não estou identificando.

               

               

              SUB DoDir (Root)

               

                  FOR Each Ext in 'qvw','qva','qvo','qvs' //     'xls', 'pdf'

                 

                      FOR Each File in filelist (Root&' \*.'&Ext)

                 

                          LOAD

                              '$(File)' As Nome,

                              FileSize('$ (File)') As Tamanho,

                              FileTime('$ (File)') As HoraDoArquivo,

                              Autogerenate 1;

                      NEXT File

                     

                  NEXT Ext

                 

                  FOR Each Dir in dirlist (Root&' \*' )

                      CALL DoDir (Dir)

                  NEXT Dir

                 

              ENDSUB

              CALL DoDir ('C:')

               

              Desde já agradeço

                • Re: Percorrer diretórios e suas subpastas criando uma tabela com os arquivos
                  Erich Shiino

                  Fiz alguns testes e para mim funcionou depois de tirar uns espaços em branco:

                   

                  Estava assim:

                  (Root&' \*' )

                  Ficou assim:

                  (Root&'\*' )

                  Parece que ao jogar o código aqui no forum, surgiram alguns espaços adicionais...

                  Em qualquer ponto dos loops, pode testar o valor das variáveis com o Trace. Assim:

                   

                  Trace $(Root);

                  Trace $(Ext);

                  Trace $(File);

                   

                   

                  Talvez, ainda em script, na aba de settings ( configurações) marque o 'Can Execute External Program', mas acho que não seria necessário

                   

                   

                  Abs,