Como fazer um backup incremental pelo MS-DOS utilizando o RoboCopy

Olá pessoal…

Hoje vou mostrar como fazer um backup incremental pelo Prompt de Comando, utilizando o RoboCopy.

Windows

Windows

Primeiramente gostaria de agradecer o Marcio Ortolan pela ajuda.

O robocopy é um comando no MS-DOS que serve para copiar arquivos de uma origem para um destino, o mais interessante é que é possível copiar apenas arquivos que tiveram alguma alteração, ou seja, um backup incremental de maneira fácil (além de ser rápido).

Abaixo o comando de exemplo.

robocopy [origem] [destino] /s /e /nfl /ndl /ns /nc /njh /njs /r:0 /w:0

E abaixo um exemplo prático de como utilizar.

robocopy E:\TOTVS\Protheus_Data   F:\Backups\Protheus_Data   /s /e /nfl /ndl /ns /nc /njh /njs /r:0 /w:0

Referência:
TechNet Microsoft

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

18 Responses

  1. José Claus disse:

    Caraca Dani, que top!
    Isso vai facilitar demais meus backups com HD externo.
    E assim, sabe me dizer se tem aquele problema de quando o hd esta cheio, porem você vai substituir um arquivo existente e ele não deixa?
    De resto, show de bola, valeu!

    • Dan_Atilio disse:

      Fala Zé, tudo bem?
      Rapaz, não sei te dizer, não cheguei a realizar esse teste, mas acho que o comando vai se comportar similar a cópia padrão do Windows mesmo.
      Abraços.

    • Benjamin Junior disse:

      José Claus, ele vai substituir o arquivo ou seja apagar o antigo e colocar o novo no lugar. se o novo arquivo for muito grande nao vai conseguir realizar a tarefe e vai retornar um codigo de erro na tela informando. claro que se o processo for automatizado vc nao vai saber o que aconteceu.
      a não ser que voce salve em outro local um arquivo com esta saida.
      isto pode ser feito com o comando no final >> destino.log e se vc estudar mais um pouco vc consegue pegar este resultado e enviar por e-mail automaticamente. pronto seu trabalho agora eh so ler o e-mail. em duvidas jardimjapao@gmail.com

  2. Benjamin Junior disse:

    Localizei um erro neste bkp incremental. modifiquei propositalmente um arquivo do destino fazendo que ele ficasse com a data mais nova. apos processamento o arquivo de origem substituiu o destino mesmo que o destino seria mais novo.
    meu objetivo era realizar um multi incremento para realização de sincronismo.
    não fiquem triste com minha descoberta. continuem utilizando como incremental mas fiquem atentos com a descoberta

  3. NEI disse:

    boa tarde
    Dan Atilio ,preciso se possível de uma ajuda no comando robocopy ,tenho um diretório em um PC o D: e fazer uma cópia de seus arquivos em um terminal na rede.
    Se puder ajudar,chegou ate a copiar uma pasta mas sem o conteúdo.

    • Dan_Atilio disse:

      Bom dia Nei, tudo bem?
      Eu cheguei a fazer o contrário, copiar de uma máquina da rede para um HD externo, mas suponho que seja só alterar a ordem das pastas, veja no exemplo abaixo.

      robocopy \\SERVIDOR_PROTHEUS\totvs\Protheus_Data    G:\Protheus\Protheus_Data   /s /e /nfl /ndl /ns /nc /njh /njs /r:0 /w:0
      

      Espero ter ajudado.
      Abraços.

  4. Wesley Pereira disse:

    Bom dia!
    Desculpa reviver o tópico espero que alguém consiga me ajudar, eu preciso fazer um processo com algo mais complicado, bom eu não consegui fazer.
    Eu ja uso o Robocopy ha um tempo mas tive que mudar a forma de fazer meus backcups por falta de espaço e por esta levando muito tempo.
    Meu problema e “PRECISO FASER A COPIA INCREMENTAL MAS TENHO QUE COLAR OS ARQUIVOS EM UMA NOVA PASTA”
    EX: Hoje ele e feito na forma tradicional como explicado no tópico, o robocopy verifica a pasta de destino se o arquivo foi alterado ele copia ou se foi criado novos arquivos na pasta de origem ele copia.
    A partir desse processo preciso que o robocopy envie esses arquivos para uma nova pasta em outro diretório.

    • Dan_Atilio disse:

      Boa noite Wesley, tudo bem?
      Mas a cópia incremental é em uma única pasta, você quer criar várias pastas? Poderia exemplificar a estrutura de pastas que você tem hoje?
      Um grande abraço.

      • Wesley Pereira disse:

        Bom dia!
        o código que uso e esse.
        robocopy “D:\Diretorio” “E:\Backup” /MIR /SEC /MT:10 /Z /R:2 /W:2 /V /NP /LOG:”E:\Backup\log.txt”
        Faço um espelho do diretório de arquivos do meu servidor para um HD Externo.
        O que preciso fazer alem desse processo!
        um segundo script em que ele cria uma nova pasta EX: “DIA10-10-2018” e copie para essa nova pasta somente os arquivos modificados, criados, mudança de pastas etc. e mantenha a pasta Espelho do HD Externo com o ultimo backup que eu definir.
        O intuito disso e criar um incremental diário com somente os arquivos novos e modificados do dia.

        • Dan_Atilio disse:

          Olá Wesley, tudo bem?
          Então, você precisaria armazenar a data em uma variável, e apontar para uma pasta com essa data, por exemplo:

          set _Data=%date:~6,4%-%date:~3,2%-%date:~0,2% 
          
          robocopy "C:\Sua Pasta Origem\"      "D:\Destino\copia dia %_Data%"       /s /e /nfl /ndl /ns /nc /njh /njs /r:0 /w:0
          

          Espero ter ajudado.

          Um grande abraço.

  5. Sereno disse:

    Bom dia Dan
    Gostaria de confirmar se o backup incremental funcional também com vários níveis de pastas, ou seja, dentro de uma pasta tenho vários níveis de outras pastas, as vezes chega a ter 5 níveis de profundidade. Será que ao backupiar incrementalmente o robocopy mantém esse nível e faz as conferências? importante lembrar que o destino tem a mesma estrutura de pastas que a origem.

    • Dan_Atilio disse:

      Boa tarde Sereno. Sim, o comando xcopy faz isso, por exemplo:

      Origem:
      C:\Pasta1
      C:\Pasta1\PastaA
      C:\Pasta1\PastaB
      C:\Pasta1\PastaC

      Destino:
      D:\Bkp\Pasta1
      D:\Bkp\Pasta1\PastaA
      D:\Bkp\Pasta1\PastaB
      D:\Bkp\Pasta1\PastaC

      Um grande abraço.

  6. Raphael Herdy disse:

    Olá Benjamin, na verdade não é necessário alterar nada no destino, pois o destino é o bakcup, ou seja, cópia fiel da origem.
    Neste caso vc deveria fazer um novo backup antes do primeiro rodar, ou seja, seria o backup do backup.
    Abraço.

  7. Nathalya disse:

    Bom dia, mesmo executando como administrador aparece “ERROR 5, Access is denied” e o nome do arquivo e para o backup. O que poderia ser e como consertar para continuar normalmente o backup completo?

    • Dan_Atilio disse:

      Boa noite.
      Nathalya, tem uma diferença em sistemas Windows, entre Executar como Administrador (clicar com o botão direito), e fazer login como Administrador e executar o procedimento (não com usuário com privilégio de Admin, mas com o próprio usuário “Administrator”).
      Efetue um teste assim, e se mesmo assim continuar com access is denied, clique com o botão direito em cima da pasta/arquivo, e libere o privilégio para todos os usuários.

  8. alxfujihara@gmail.com disse:

    /s e /e se contradizem, não?

Deixe uma resposta para Dan_AtilioCancelar resposta

Terminal de Informação