none
Tem como fazer um bat/scripts para mover arquivos das sub-pastas e colocar no diretório raiz RRS feed

  • Pergunta

  • Prezados, estou com dificuldade para fazer um BAT OU SCRIPT para executar a seguinte tarefa.

    1) Tenho uma pasta RAIZ, onde a mesma tem em torno de 800 SUB-PASTAS com arquivos TXT.

    2) Preciso MOVER para a pasta RAIZ esses arquivos TXT de todas as pastas a cada 1 hora.

    3) As SUB-PASTAS recebem arquivos TXT a cada 1 hora e atualmente estou realizando essa operação manualmente.

    Aguardo a colaboração de todos.

    Grato,

    J. Anulino.

     

    sábado, 14 de junho de 2014 01:02

Respostas

  • Criei uma estrutura e usei o script abaixo para listar os arquivos:

    Get-ChildItem "C:\DADOS" -Recurse |  
        where {($_.PSiscontainer -eq $False) -and ($_.DirectoryName -ne "C:\DADOS")} | 
        %{$_.fullname}

    O resultado:

    C:\DADOS\AA1\abc.txt
    C:\DADOS\AA1\xyz.txt
    C:\DADOS\AA2\dce.txt
    C:\DADOS\AA800\fgh.txt

    Agora vou rodar o script que eu havia postado (agora só alterei a pasta)

    Get-ChildItem "C:\DADOS" -Recurse | 
        where {($_.PSiscontainer -eq $False) -and ($_.DirectoryName -ne "C:\DADOS")} | 
        %{ Copy-Item $_.FullName -Destination "C:\DADOS"}

    Resultado (aquele script de listagem não mostra os dados na raiz)

    Os arquivos foram copiados para a raiz.

    Se não funcionou pra você eu preciso que você poste o seu script e também alguma pista de erro, foi exibido algum erro?


    Fábio de Paula Junior

    • Marcado como Resposta J. Anulino segunda-feira, 16 de junho de 2014 12:49
    domingo, 15 de junho de 2014 13:34
    Moderador

Todas as Respostas

  • Use o PowerShell

    Get-ChildItem "C:\Raiz" -Recurse | 
        where {($_.PSiscontainer -eq $False) -and ($_.DirectoryName -ne "C:\Raiz")} | 
        %{ Copy-Item $_.FullName -Destination "C:\Raiz"}


    São 3 comandos ligados pelo pipe "|".

    1) O primeiro lista todas as subpastas e arquivos.

    2) O segundo filtra o resultado para exibir somente os arquivos (não exibe pastas) e também não exibir arquivos que já estejam localizados na pasta C:\Raiz.

    3) O terceiro faz a cópia de cada item.

    Uma forma de você entender o comando é executar por partes, primeiro execute apenas até o primeiro pipe(não coloque o pipe no final), você vai ver uma lista de pasta e arquivos.

    Depois execute até o segundo pipe, assim sucessivamente.


    Fábio de Paula Junior


    sábado, 14 de junho de 2014 16:25
    Moderador
  • Agradeço pelo script, fiz o teste e não funcionou.

    Estou com o sistema operacional windows8.

    Segue a minha arvore no diretório raiz.

    PASTA:       DADOS

    SUB-PASTA:  DADOS\AAA1 - CONTEM  SÓ ARQUIVOS  TXT

                       DADOS\AAA2 - CONTEM  SÓ ARQUIVOS  TXT

                       DADOS\AAA3 - CONTEM  SÓ ARQUIVOS  TXT

                       DADOS\ AAA800- CONTEM  SÓ ARQUIVOS  TXT

    TENHO EM TORNO DE 800 SUB-PASTAS COM ARQUIVOS TXT, PRECISO MOVE TODOS OS ARQUIVOS PARA A PASTA PRINCIPAL CHAMADA: DADOS

    AS SUB-PASTAS RECEBEM ARQUIVOS TXT A CADA 1 HORA E TENHO QUE MOVER OS ARQUIVOS PARA A PASTA: DADOS

    Será que você pode montar o script ou fazer um bat para eu automatizar essa rotina.

    Grato,

    João - Rio de Janeiro.


    • Editado J. Anulino domingo, 15 de junho de 2014 01:17 Correção
    domingo, 15 de junho de 2014 01:14
  • Criei uma estrutura e usei o script abaixo para listar os arquivos:

    Get-ChildItem "C:\DADOS" -Recurse |  
        where {($_.PSiscontainer -eq $False) -and ($_.DirectoryName -ne "C:\DADOS")} | 
        %{$_.fullname}

    O resultado:

    C:\DADOS\AA1\abc.txt
    C:\DADOS\AA1\xyz.txt
    C:\DADOS\AA2\dce.txt
    C:\DADOS\AA800\fgh.txt

    Agora vou rodar o script que eu havia postado (agora só alterei a pasta)

    Get-ChildItem "C:\DADOS" -Recurse | 
        where {($_.PSiscontainer -eq $False) -and ($_.DirectoryName -ne "C:\DADOS")} | 
        %{ Copy-Item $_.FullName -Destination "C:\DADOS"}

    Resultado (aquele script de listagem não mostra os dados na raiz)

    Os arquivos foram copiados para a raiz.

    Se não funcionou pra você eu preciso que você poste o seu script e também alguma pista de erro, foi exibido algum erro?


    Fábio de Paula Junior

    • Marcado como Resposta J. Anulino segunda-feira, 16 de junho de 2014 12:49
    domingo, 15 de junho de 2014 13:34
    Moderador
  • Prezado Paulo,

    Funcionou.

    Você pode me ajudar como posso automatizar esse scrip para que ele seja exetudado a cada 1 hora, porque preciso deixar as subpastas vazias. Informo que a cada uma hora tenho novas informações em txt nas subpastas.

    Agradeço apoio oferecido.

    João Anulino.

    segunda-feira, 16 de junho de 2014 12:19
  • Use o agendador de tarefa do Windows, crie uma tarefa que execute de hora em hora.

    Isso aqui pode ser útil

    Weekend Scripter: Use the Windows Task Scheduler to Run a Windows PowerShell Script

    http://blogs.technet.com/b/heyscriptingguy/archive/2012/08/11/weekend-scripter-use-the-windows-task-scheduler-to-run-a-windows-powershell-script.aspx


    Fábio de Paula Junior

    segunda-feira, 16 de junho de 2014 13:32
    Moderador
  • Fábio de Paula Junior

    Gostaria de tirar uma dúvida.

    Utilizo um script de backup com auxilio do comando "xcopy B:\*.mp3 /s /c /y /d D:\newday\mp3".

    Com ele eu copio arquivos de diversas extensões perfeitamente. O único problema é que ele copia a estrutura de pastas e isso pra mim não é importante. 

    Gostaria que ele simplesmente copiasse os arquivos, por exemplo, os mp3 da unidade B: e os deixasse no diretório D:\newday\mp3 mas sem a estrutura de pastas, ou então copiando apenas o último nível das pastas. Para ficar um pouco mais claro vou dar um exemplo:

    Se houver o arquivo "B:\musicas\2014\metallica\wisky in the jar.mp3" ele poderia copiá-lo para "D:\newday\mp3\metallica\wisky in the jar.mp3"

    Não sei se ficou muito claro...

    Será que isso é possível? Se não for, será que é possível então copiar as musicas para a pasta mp3 sem a estrutura de pastas original?

    Obrigado pela atenção!

    • Editado Fabricio-DC segunda-feira, 18 de agosto de 2014 12:24
    segunda-feira, 18 de agosto de 2014 12:21