Usuário com melhor resposta
Tem como fazer um bat/scripts para mover arquivos das sub-pastas e colocar no diretório raiz

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.
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
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
- Editado Fábio JrModerator sábado, 14 de junho de 2014 16:26
-
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
-
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
-
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.
-
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
Fábio de Paula Junior
-
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