Batch para criar backup de várias pastas

Olá pessoal…

Hoje vou mostrar um arquivo batch que desenvolvi, para criar backups de várias pastas para um destino (podendo ser informado, ou até mesmo um HD externo).

Windows

Windows

Pessoal, preparei um batch, onde é possível informar um diretório de destino, e ele copia várias pastas para esse diretório:

@echo OFF
title Backup Geral

set /p _Destino=Insira o diretorio de destino: 

if exist "%_Destino%" (
  echo Backup iniciado - %DATE% %TIME%
  
  if not exist "%_Destino%\backups" mkdir "%_Destino%\backups\"

  robocopy D:\Skype   %_Destino%\backups\Skype\  /s /e /nfl /ndl /ns /nc /njh /njs /r:0 /w:0
  echo Copia diretorio "Skype" finalizado - %DATE% %TIME%
  
  robocopy D:\Thunderbird   %_Destino%\backups\Thunderbird\  /s /e /nfl /ndl /ns /nc /njh /njs /r:0 /w:0
  echo Copia diretorio "Thunderbird" finalizado - %DATE% %TIME%

  echo Backup finalizado - %DATE% %TIME%
  
) else (
  echo Diretorio "%_Destino%" nao existe!
)

pause

Conforme código acima, é informado um diretório para backups, nisso é criado um subdiretório chamado “backups”, por exemplo, se o usuário digitar “D:\Daniel\”, seria criado a pasta “D:\Daniel\backups”, e dentro dela estaria a cópia de tudo que eu tenho em D:\Skype e D:\Thunderbird, lembrando que é um backup incremental, ou seja, só pega arquivos diferentes.

Agora caso você queira colocar em um pendrive ou um HD Externo e não precisar ficar informando o diretório, ai preparei esse batch:

@echo OFF
title Backup Geral

set OLDDIR=%CD%
chdir /d %OLDDIR% &rem restore current directory
set _Destino=%cd%

if exist "%_Destino%" (
  echo Backup iniciado - %DATE% %TIME%
  
  if not exist "%_Destino%\backups" mkdir "%_Destino%\backups\"

  robocopy D:\Skype   %_Destino%\backups\Skype\  /s /e /nfl /ndl /ns /nc /njh /njs /r:0 /w:0
  echo Copia diretorio "Skype" finalizado - %DATE% %TIME%
  
  robocopy D:\Thunderbird   %_Destino%\backups\Thunderbird\  /s /e /nfl /ndl /ns /nc /njh /njs /r:0 /w:0
  echo Copia diretorio "Thunderbird" finalizado - %DATE% %TIME%

  echo Backup finalizado - %DATE% %TIME%
  
) else (
  echo Diretorio "%_Destino%" nao existe!
)

pause

Para fazer funcionar, basta copiar esse conteúdo e gravar em um arquivo com a extensão .bat e dar dois cliques. Lembrando que, se necessário altere as pastas de origem, podendo pegar até diretórios de rede.

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

Dan_Atilio
Analista e desenvolvedor de sistemas. Técnico em Informática pelo CTI da Unesp. Graduado em Banco de Dados pela Fatec Bauru. Entusiasta de soluções Open Source e blogueiro nas horas vagas.

6 Responses

  1. Humberto disse:

    Ótima dica Atilio, eu acrescentei um log no final do meu /LOG:f:\backup.log e um /R:10 para que ele não trave em um arquivo que esteja em uso ou que não seja possivel copiar.

  2. Leandro C Oliveira disse:

    Ótimo esse código, fiz hum que compacta no Winrar, assim os arquivos fica no tamanho reduzido.

    Arquivo
    Backup diário.bat

    rename D:\PASTA PASTA- (Caso não queira que a mesma seja usada no momento, pois a minha pasta se trata de banco de dados em sistema de arquivos)
    C:\Arquiv~1\WinRAR\RAR.exe a -esh -m5 -mt2 -r -s -t -agyyyy.mm.dd PASTA_.rar @backupDIARIO.txt
    Rename D:\PASTA- PASTA
    Exit

    Arquivo
    backupDIARIO.txt
    D:\PASTA-\*.*

  3. ola tudo bem? gostaria de criar um script para copiar apenas a pasta “DESKTOP” e “MEUS DOCUMENTOS” em terminais corporativos com varios usuarios, ou seja, que copie apenas estas duas pastas dentro de determinada estrutura (docs and settings no windows xp ou users no windows 7 acima). Ou seja… o nome do usuario seria uma incognita, ou que o scrip solicite que se digite o nome da pasta do usuario…

    • Dan_Atilio disse:

      Boa tarde Rafael, tudo bem?
      Para acessar dinamicamente, tente os seguintes comandos (ao pressionar Windows + R, abriu normalmente para mim), o primeiro é o Desktop, e o segundo é o Meus Documentos:

      “%systemdrive%\users\%username%\Desktop”
      “%systemdrive%\users\%username%\Documents”

      Um grande abraço.

Deixe uma resposta