none
Script de cópia de arquivos RRS feed

  • 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
    quinta-feira, 11 de outubro de 2012 13:12

Respostas

  • 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

    domingo, 14 de outubro de 2012 21:11
    Moderador
  • 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



    segunda-feira, 15 de outubro de 2012 13:34

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!

    quinta-feira, 11 de outubro de 2012 22:19
  • 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

    domingo, 14 de outubro de 2012 21:11
    Moderador
  • 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



    segunda-feira, 15 de outubro de 2012 13:34
  • Obrigado a todos pelas respostas!

    Esse funcionou, mas clicando no bat pelo windows não vai... tenho que executar pelo prompt... alguma dica?

    Muito obrigado!

    quinta-feira, 18 de outubro de 2012 11:14
  • Valeu, vou testar!!! :D
    quinta-feira, 18 de outubro de 2012 11:20
  • 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

    quarta-feira, 16 de outubro de 2013 13:43