Como crear un plan de copias de seguridad usando robocopy y forfiles

Plataforma: Windows

Objetivo
Configurar un .bat que copie backups SQL que se guardan en local en un máquina y copiarlos en una unidad de red. Se quieren guardar los últimos 8 backups, pero en local sólo caben 3.

Prerrequisitos
Carpeta origen: C:\BackupSQL\
Carpeta destino: \\192.168.1.10\Servidor\Copias\
En la máquina en local sólo se guardan los 3 últimos backups
En la unidad de red queremos tener los últimos 8 backups

Procedimiento
Vamos a crear una unidad de red conectada a IPC$ (interprocess communication share). Para evitar problemas de anteriores conexiones, antes de crearla, la eliminamos:

net use \\192.168.1.10\IPC$ /delete
net USE P: \\192.168.1.10\Servidor1 /user:localhost\usuario "password" /y

Luego a través del robocopy copiamos los archivo des de la carpeta origen a la unidad anteriormente mapeada. No utilizamos los habituales parámetros de mirroring de robocopy como por ejemplo MIR, simplemente copiamos los backup del origen al destino, si en destino ya están no los volvemos a copiar ( /XO ):

robocopy "C:\BackupSQL" P:\\Copias\ /E /XO /NP /LOG+:logBackup.txt /TEE

Usando el comando forfiles eliminamos los achivos de backup que tengan mas de 8 días de la carpeta destino de la unidad de red:

forfiles /P P:\Copias\ /s /D -8 /C "cmd /c echo @path Eliminado & del @file" >> logBackup.txt

Finalmente eliminamos la unidad mapeada:

net use P: /D /y


Aquí el código completo del .bat:

net use \\192.168.1.10\IPC$ /delete
net USE P: \\192.168.1.10\Servidor1 /user:localhost\usuario "password" /y
robocopy "C:\BackupSQL" P:\\Copias\ /E /XO /NP /LOG+:logBackup.txt /TEE
forfiles /P P:\Copias\ /s /D -8 /C "cmd /c echo @path Eliminado & del @file" >> logBackup.txt
net use P: /D /y




Si el post te ha ayudado a salir de un marrón, te ha servido pá lo que sea o simplemente te ha gustado y quieres colaborar puedes pinchar en los anuncios ;)

One thought on “Como crear un plan de copias de seguridad usando robocopy y forfiles

  1. Hola que tal, me parece muy interesante este código para hacer copias de seguridad, pero quisiera saber si me podrías ayudar con uno que debo realizar pero no logro dar con el código correcto.

    Debo realizar lo siguiente:

    Buscar en toda la PC de los usuarios (todos las unidades) todos los archivos autocad (*.DWG) y word (*.doc) y cada vez que encuentre uno lo copie en una nueva ruta de mi server (\\server1\BK_usuarios\), la primera vez que se realice debe ser un FULL y luego solo se copien los archivos modificados desde la fecha del FULL.

    Si bien es cierto hacer la busqueda y copia del full no ha sido dificil usando lo siguiente:

    mkdir \\server1\j$\bk_usuarios\%computername%\FULL\%date:~6,4%-%date:~3,2%-%date:~0,2%\a_ofimaticos\
    FORFILES /P C:\ /S /M *.doc* /C “cmd /c COPY @file \\server1\j$\bk_usuarios\%computername%\FULL\%date:~6,4%-%date:~3,2%-%date:~0,2%\a_ofimaticos\”
    FORFILES /P C:\ /S /M *.dwg /C “cmd /c COPY @file \\server1\j$\bk_usuarios\%computername%\FULL\%date:~6,4%-%date:~3,2%-%date:~0,2%\a_ofimaticos\”

    Mi inconveniente es que no se como hacer para:
    1) Que busque en todos los discos, mi codigo actual solo busca en disco C (estaba pensando colocar una lineas con “if exist D:\ goto copiaD” y asi para cada disco, pero no estoy seguro si hay otra forma mas eficiente;
    2) Que cada vez que encuentre y copie el archivo, lo copie manteniendo su estructura de carpetas original, porque luego no se sabe de donde salio ese archivo puesto que los coloca todos juntos.

    Espero me puedas ayudar ..

Leave a Reply

Your email address will not be published. Required fields are marked *