Sincronizar carpetas para respaldo


Existen múltiples herramientas para sincronizar carpetas dentro del mismo disco, otro disco interno y una unidad USB (ej: Disco duro externo, pendrive, etc). Sin embargo, Windows posee un comando llamado Robocopy con el cual podremos realizar una sincronización sin necesidad de instalar nada más.

Creación de script

En un documento de texto agregamos lo siguiente:

robocopy “DIRECTORIO ORIGEN” “DIRECTORIO DESTINO” /MIR /Z /R:0

Esto lo guardamos con extensión .cmd o .bat (ej.: sincronizacion.cmd). Al dar doble click, veremos como el programa revisa los archivos, copia los nuevos y elimina los que no se encuentran en la carpeta destino.

Podemos mejorar el comando agregando lo siguiente:

@echo off
robocopy “DIRECTORIO ORIGEN” “DIRECTORIO DESTINO” /MIR /Z /R:0 > nul

La linea @echo off desactivamos el echo con lo cual no mostrará ni el prompt ni el comando utilizado.

La siguiente linea es el comando de sincronización el cual comienza con robocopy (la herramienta que hará la copia), el directorio origen que queremos copiar o respaldar, el directorio destino en el cual haremos la copia o respaldo. Luego tenemos las siguientes opciones:

/MIR creará una copia exacta (copia incluso directorios vacios y elimina los archivos y directorios ausentes en el directorio origen y que aún se encuentran en el directorio destino).

/Z utilizada en el caso de respaldar a un directorio en red para que al perder la conexión, continúe el copiado donde quedó.

/R:0 esto sirve para decirle al programa que no reintente el copiado si hay algún error. La cantidad de reintentos por defecto es de 1000000 con 30 segundos entre cada reintento. Para cambiar el número de reintentos, sólo deben cambiar el 0 por el número deseado. Para cambiar los segundos entre cada reintento, deben agregar la opción /W:n donde n son los segundos.

Por último, envío toda la información a nul para que no se muestre en la ventana. Esto combinado con un vbscript para iniciar el archivo en modo oculto, hará que nuestro archivo de sincronización se ejecute en segundo plano (sin ser visto).

Para más opciones de robocopy, pueden ingresar a CMD y escribir robocopy /?.

Si deseas sincronizar más directorios, sólo debes agregar una nueva linea por cada directorio:

robocopy “DIRECTORIO ORIGEN 2” “DIRECTORIO DESTINO 2” /MIR /Z /R:0  > nul

Quedando:

@echo off
robocopy “DIRECTORIO ORIGEN” “DIRECTORIO DESTINO” /MIR /Z /R:0  > nul
robocopy “DIRECTORIO ORIGEN 2” “DIRECTORIO DESTINO 2” /MIR /Z /R:0  > nul

El archivo vbscript para ejecutar el archivo .cmd creado anteriormente es como sigue:

Set fso = CreateObject(“Scripting.FileSystemObject”)
GetTheParent = fso.GetParentFolderName(Wscript.ScriptFullName)
set objshell = createobject(“wscript.shell”)
objshell.run “””” & GetTheParent & “\sincronizacion.cmd”””,vbhide

Este archivo debe estar junto con el .cmd y evidentemente cambiar el nombre sincronizacion.cmd al que ustedes hayan puesto. Este código se copia en un documento de texto y se guarda con extensión .vbs.

Teniendo listos ambos archivos, podemos realizar la sincronización de forma manual dando doble click al script .vbs o de manera automática ya sea con el programador de tareas o ingresando un acceso directo al menu inicio.

Para esto último, deben dar click derecho al script vbs y crear un acceso directo. Luego abren ejecutar (Tecla Windows + R) y escribir shell:common startup. Esto abrirá la carpeta donde se ubican los accesos directos de las aplicaciones que se inician junto al sistema. En esta carpeta pegan el acceso directo antes creado y cada vez que inicie Windows, se iniciará la sincronización.