Cómo hacer una copia de seguridad de nuestros datos en una carpeta por día. Cada día se creará una carpeta y se hará la copia de seguridad a esa nueva carpeta. Para ello usaremos un fichero de proceso por lotes .bat y la herramienta Robocopy.
- Requisitos para hacer copia de seguridad con Robocopy a una nueva carpeta por cada día en equipo Windows.
- Script .bat de proceso por lotes para crear carpeta cada día y ejecutar Robocopy con los parámetros apropiados.
- Programación de tarea para ejecutar diariamente la copia de seguridad en Windows.
Requisitos para hacer copia de seguridad con Robocopy a una nueva carpeta por cada día en equipo Windows
Necesitaremos disponer de la herramienta Robocopy. A día de hoy Microsoft ha «descontinuado» el producto y no tiene nuevas versiones desde hace varios años, pero la última es perfectamente válida y ha sido probada en entornos Windows XP, Windows Vista, Windows 7, Windows 8, Windows 10 y Windows Server 2003, Windows Server 2008, Windows Server 2012, Windows Server 2016.
El fichero Robocopy debe estar o bien en la carpeta donde guardemos el script de proceso por lotes .bat o bien en cualquier otro sitio pero especificado en la variable PATH del sistema.
El usuario con el que ejecutaremos el script debe tener suficientes privilegios en el sistema operativo Windows como para acceder a las carpetas origen, crear carpetas en el destino y copiar ficheros.
En caso de no disponer de Robocopy o no querer usar esta herramienta podemos emplear el script que explicamos a continuación y cambiar Robocopy por la herramienta de la línea de comandos que hayamos elegido para la copia de los ficheros (xcopy, teracopy, …).
Script .bat de proceso por lotes para crear carpeta cada día y ejecutar Robocopy con los parámetros apropiados
El script que mostramos a continuación se copiará y pegará dentro de un fichero .bat, por ejemplo «copia_seguridad_diaria.bat». Esto se puede hacer con cualquier editor de texto plano, como el propio Notepad de Windows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
echo off echo "Creando carpeta..." set dia_actual=%date:~-4,4%%date:~3,2%%date:~-10,2% set destino_backup=E:\backup\%dia_actual% set origen_backup="D:\Mis documentos\Empresa" mkdir %destino_backup% echo "Copiando ficheros..." robocopy %origen_backup% %destino_backup% /S /E /R:0 /COPYALL /SECFIX /NP /Log:%destino_backup%\%dia_actual%.log /NJS if errorlevel 4 echo Error en la copia & goto Copia_Error if errorlevel 1 echo Copia finalizada correctamente & goto Copia_Correcta if errorlevel 0 echo Copia finalizada correctamente sin cambios & goto Copia_Correcta_Sin_Cambios :Copia_Error msg * Se ha producido un error en la copia. pause exit :Copia_Correcta msg * Copia realizada correctamente. pause exit :Copia_Correcta_Sin_Cambios msg * Copia realizada correctamente sin cambios. pause exit |
Explicando un poco el script:
- En primer lugar obtiene la fecha actual del sistema con un formato concreto en la variable dia_actual.
- Establecemos el origen de la copia en las varibles origen_backup y destino_backup. En el caso de destino_backup se compondrá de la unidad y carpeta raíz más el día actual (día, mes y año).
- Crea la carpeta de destino usando como nombre la ruta raíz y el día actual.
- Ejecuta Robocopy con los parámetros que le hayamos indicado.
- Si devuelve error lo muestra en pantalla.
- Dejamos los «pause» para depurar y ver si el script funciona correctamente. Cuando funcione es muy importante quitarlo para que el script no quede ejecutándose continuamente a la espera de una pulsación (que nunca llegará si lo ejecutamos con una tarea programada).
Como hemos indicado en los requisitos, el fichero robocopy.exe debe estar en la misma ubicación que el script copia_seguridad_diaria.bat o bien su ubicación debe estar en la variable PATH del sistema o bien deberemos indicar la ruta donde está ubicado en el propio script. Lo más sencillo es que esté en la misma ubicación que el script.
Programación de tarea para ejecutar diariamente la copia de seguridad en Windows
Abriremos el Programador de tareas, desde el Panel de control y agregaremos una nueva tarea:
Marcaremos «Ejecutar tanto si el usuario inició sesión como si no» para que la tarea se ejecute aunque el usuario no haya iniciado sesión y marcaremos también «Ejecutar con los privilegios más altos»:
En la pestaña «Desencadenadores» pulsaremos en «Nuevo»:
Elegiremos la frecuencia de ejecución de la tarea, los días de la semana, la hora en la que queramos que se ejecute (a ser posible cuando no haya usuarios conectados), etc.:
En la pestaña «Acciones» pulsaremos en «Nueva»:
Pulsaremos en «Examinar» y elegiremos el fichero .bat creado anteriormente (en nuestro copia_seguridad_diaria.bat):
Es conveniente y recomendable indicar en «Iniciar en» la ruta donde tenemos alojado el script. En algunos sistemas operativos Windows si no se elige esta ruta falla la ejecución de la tarea:
En la pestaña «Condiciones» marcaremos «Activar el equipo para ejecutar esta tarea»:
Por último, en la pestaña «Configuración» podremos indicar más opciones para la tarea como que se detenga si se ejecuta durante un tiempo determinado o que solo se ejecute una única instancia de la tarea (por si se solapan en horario, para que no se ejecute a la vez):
Una vez que aceptemos en la ventana anterior nos solicitará usuario y contraseña para la tarea. Indicaremos uno que tenga permisos suficientes para copiar archivos del origen y crear carpeta y pegar los archivos en el destino:
A partir de ahora el script se ejecutará en la programación y periodicidad indicada y creará una carpeta por día con la siguiente estructura:
Cuando la copia finalice mostrará este mensaje en pantalla:
Si resulta molesto será suficiente con quitar las líneas:
msg * Copia realizada correctamente.
y
msg * Copia realizada correctamente sin cambios.
Y como hemos dicho anteriormente, para que el script funcione adecuadamente, se inicie y se cierre, hay que quitar los «pause» que hayamos puesto, que solo sirven para depurar el script.