Usuário com melhor resposta
Script de cópia de arquivos

Pergunta
-
Bom dia,
Quero fazer um script (vbs ou bat) que copiei arquivos de um diretório para outro, sendo que os nomes dos arquivos a serem copiados estão num txt (um arquivo por linha, e a quantidade vai variar a cada execução). Queria que fosse gerado um arquivo de log, para saber quais arquivos foram copiados/encontrados, e quais não foram. Vocês podem me ajudar?
Muito obrigado!
- Editado Coloric quinta-feira, 11 de outubro de 2012 13:14
Respostas
-
Amigo com powershell é facil..
$Lista = Get-Content c:\Lista.txt $DiretorioOrigem = "C:\Origem" $DiretorioDestino = "C:\Destino" Foreach($Item in $Lista){ if(Get-Item ($DiretorioOrigem+"\"+$Item)){ Write-host "$ITEM Encontrado no diretório, `n Vai começar copia" copy-item ($DiretorioOrigem+"\"+$Item) (+$DiretorioDestino+"\"+$Item) } else { write-host "$Item não encontrado" } }
Tenta isso ;)
Ajudei? Marca como útil, aproveita e visita meu blog :) HowToServer.com
Gosta de powershell? entra no grupo do facebook Powershell Brasil
Quer aprender powershell? leia esse artigo Aprendendo Powershell
Artigos na TechNet Wiki
- Sugerido como Resposta Matheus Kamphorst terça-feira, 16 de outubro de 2012 18:31
- Editado Fábio JrModerator quarta-feira, 17 de outubro de 2012 15:31 Formato código
- Marcado como Resposta Fábio JrModerator quarta-feira, 17 de outubro de 2012 15:31
-
Coloric,
Veja o .BAT abaixo.
1. Configure as pastas de origem e destino, não coloque "\" no final, depois a barra será colocada concatenada junto com o nome do arquivo
2. Eu limpo os logs, isto é, deleto os arquivos copiados.log e falha.log
3. Na linha que começa com FOR é que é lido o arquivo lista.txt que contém os nomes dos arquivos que devem ser copiados.
4. Quando encontra o arquivo ele é copiado e seu nome colocado dentro do copiado.log
5. Quando não encontra ele coloca o nome do arquivo dentro do falha.log
Importante!!
O arquivo .bat e o lista.txt devem estar na mesma pasta, senão vc vai ter que modificar algumas coisas no script.
@ECHO OFF SET ORIGEM=C:\temp\original SET DESTINO=C:\temp\backup ::LIMPA OS LOGS DEL COPIADO.LOG /Q DEL FALHA.LOG /Q for /F "tokens=*" %%A IN (lista.txt) DO CALL :COPIA %%A GOTO :EOF :COPIA echo Verificando %1 ... IF EXIST %ORIGEM%\%1 ( :: se existe copia e grava no log copiado copy %ORIGEM%\%1 %DESTINO% /Y echo %1 >> copiado.log :: VAI PARA O PROXIMO ARQUIVO GOTO :EOF ) :: se não existe apenas grava no log falha echo %1 >> falha.log
Fábio de Paula Junior
- Sugerido como Resposta Matheus Kamphorst terça-feira, 16 de outubro de 2012 18:31
- Marcado como Resposta Fábio JrModerator quarta-feira, 17 de outubro de 2012 15:32
Todas as Respostas
-
Bom dia,
Bom segue parte da solução,
script .bat para copiar arquivos de um diretorio para o outro:
@echo off
copy /y "local do arquivo de origem" "local da copia"exemplo:
da rede para o disco C:\ da maquina:
@echo off
copy /y "\\servidor1\arquivo1.mp3" "C:\"de disco para disco:
@echo off
copy /y "C:\pasta1\arquivo.txt" "E:\pasta2"espero ter ajudado!
-
Coloric,
Veja o .BAT abaixo.
1. Configure as pastas de origem e destino, não coloque "\" no final, depois a barra será colocada concatenada junto com o nome do arquivo
2. Eu limpo os logs, isto é, deleto os arquivos copiados.log e falha.log
3. Na linha que começa com FOR é que é lido o arquivo lista.txt que contém os nomes dos arquivos que devem ser copiados.
4. Quando encontra o arquivo ele é copiado e seu nome colocado dentro do copiado.log
5. Quando não encontra ele coloca o nome do arquivo dentro do falha.log
Importante!!
O arquivo .bat e o lista.txt devem estar na mesma pasta, senão vc vai ter que modificar algumas coisas no script.
@ECHO OFF SET ORIGEM=C:\temp\original SET DESTINO=C:\temp\backup ::LIMPA OS LOGS DEL COPIADO.LOG /Q DEL FALHA.LOG /Q for /F "tokens=*" %%A IN (lista.txt) DO CALL :COPIA %%A GOTO :EOF :COPIA echo Verificando %1 ... IF EXIST %ORIGEM%\%1 ( :: se existe copia e grava no log copiado copy %ORIGEM%\%1 %DESTINO% /Y echo %1 >> copiado.log :: VAI PARA O PROXIMO ARQUIVO GOTO :EOF ) :: se não existe apenas grava no log falha echo %1 >> falha.log
Fábio de Paula Junior
- Sugerido como Resposta Matheus Kamphorst terça-feira, 16 de outubro de 2012 18:31
- Marcado como Resposta Fábio JrModerator quarta-feira, 17 de outubro de 2012 15:32
-
Amigo com powershell é facil..
$Lista = Get-Content c:\Lista.txt $DiretorioOrigem = "C:\Origem" $DiretorioDestino = "C:\Destino" Foreach($Item in $Lista){ if(Get-Item ($DiretorioOrigem+"\"+$Item)){ Write-host "$ITEM Encontrado no diretório, `n Vai começar copia" copy-item ($DiretorioOrigem+"\"+$Item) (+$DiretorioDestino+"\"+$Item) } else { write-host "$Item não encontrado" } }
Tenta isso ;)
Ajudei? Marca como útil, aproveita e visita meu blog :) HowToServer.com
Gosta de powershell? entra no grupo do facebook Powershell Brasil
Quer aprender powershell? leia esse artigo Aprendendo Powershell
Artigos na TechNet Wiki
- Sugerido como Resposta Matheus Kamphorst terça-feira, 16 de outubro de 2012 18:31
- Editado Fábio JrModerator quarta-feira, 17 de outubro de 2012 15:31 Formato código
- Marcado como Resposta Fábio JrModerator quarta-feira, 17 de outubro de 2012 15:31
-
-
-
E ai galera!! Estou tentando usar este Script que o Fábio de Paula Junior propôs, mas não estou conseguindo rodar... Gostaria de ver se vcs me ajudam nessa parada!!
São vários arquivos (mais ou menos 6000) ´com esta sintaxe: 2001_100_1325_Cloud_Mask_b0.tif = ano_diajuliano_hora_produto.tif. O que varia são ano, dia e hora.
O detalhe que estes arquivos precisam ser copiados com base em uma lista onde só tenho o ano e dia (não importanto a hora) sintaxe: 2001_1 = ano_diajuliano.
Valeu pela força.
Abraço
-
Matheus ,
Poderia me ajudar?
Testei esse script e deu certo fiz algumas adaptações para o que eu preciso (estou conhecendo agora o funcionamento do PowerShell). Porem na minha lista.txt e nos arquivos que tem que ser movidos possui nomes com acentos(´,~,ç) e ai esses não estão sendo copiados. Como consigo adaptar isso?Obrigada !
-
-