Hacer un script de respaldo de archivos en Windows

Para poder respaldar todo el contenido de un directorio en un archivo dentro de otra unidad, disco o directorio, podemos crear un script de línea de comandos:

Crear el archivo ejecutable

  1. Abrir un editor de textos de nuestra preferencia (puede ser el Bloc de notas)
  2. Escribir los comandos para realizar cada una de las acciones deseadas
  3. Guardar el archivo con extensión .bat (ejemplo: respaldo.bat)

Desactivar el “eco” de los comandos

Cuando se ejecuta cada uno de los comandos, los mismos se repiten en la línea de comandos por defecto. Para evitar esto debemos comenzar el script con:

@echo off

Obtener la fecha y hora de ejecución

En las variables FECHA y HORA almacenamos sendos datos:

for /f "tokens=1-3 delims=/- " %%a in ('date /t') do set FECHA=%%c%%b%%a
for /f "tokens=1-2 delims=: " %%a in ('time /t') do set HORA=%%a%%b

Generar nombre del archivo de respaldo

Con la fecha y la hora, generamos un nombre de archivo  y lo almacenamos en la variable BACKUP_FILE

set BACKUP_FILE=Contenido_%FECHA%%HORA%.zip

Comprimir los datos

En esta parte se puede utilizar cualquier aplicación que permita comprimir por línea de comandos. Yo les propongo que usen 7zip que es gratuito. Tenemos que especificar la ubicación del archivo de respaldo primero y luego el directorio con el contenido a respaldar:

7zip.exe a -tzip "c:/backups/BACKUP_FILE" "c:/Contenido/"

Registrar log

El registro de log es opcional, pero si vamos a planificar la ejecución del script es conveniente registrarla para poder consultar después si se realizó o no correctamente.

Establecemos el nombre y la ubicación del log relativo a la ubicación en que se encuentre el script de backup. Les propongo generar un log por día y no por ejecución:

set BACKUP_LOG_FILE=logs/Contenido_%FECHA%.log

Al principio del script indicamos el inicio del respaldo con la fecha y hora:

echo. >> %BACKUP_LOG_FILE%
echo Inicia respaldo >> %BACKUP_LOG_FILE%
echo %FECHA% %HORA% >> %BACKUP_LOG_FILE%

Modificamos la línea donde hacemos la compresión para que los resultados de la misma vayan al log

7zip.exe .... >> %BACKUP_LOG_FILE%

Al final del script indicamos el fin del respaldo con la fecha, hora y el archivo de log generado:

echo. >> %BACKUP_LOG_FILE%
echo Fin respaldo >> %BACKUP_LOG_FILE%
echo %FECHA% %HORA% >> %BACKUP_LOG_FILE%
echo Log file: %BACKUP_LOG_FILE%

OBS: El comando “echo.” solamente guarda en el log una línea vacía.

Programar ejecución

Teniendo el script, cada vez que lo ejecutemos, se generará un backup (y un log si así lo decidimos). Para que este backup se ejecute automáticamente hay que programar la ejecución del script en Windows o en Linux.

Script completo

Les dejo el contenido del script completo para que lo puedan copiar y usar como base para generarse el propio:

@echo off

for /f "tokens=1-3 delims=/- " %%a in ('date /t') do set FECHA=%%c%%b%%a
for /f "tokens=1-2 delims=: " %%a in ('time /t') do set HORA=%%a%%b

set BACKUP_FILE=Contenido_%FECHA%%HORA%.zip
set BACKUP_LOG_FILE=logs/Contenido_%FECHA%.log

echo. >> %BACKUP_LOG_FILE%
echo Inicia respaldo >> %BACKUP_LOG_FILE%
echo %FECHA% %HORA% >> %BACKUP_LOG_FILE%

7zip.exe a -tzip "c:/backups/BACKUP_FILE" "c:/Contenido/" >> %BACKUP_LOG_FILE%

echo. >> %BACKUP_LOG_FILE%
echo Fin respaldo >> %BACKUP_LOG_FILE%
echo %FECHA% %HORA% >> %BACKUP_LOG_FILE%
echo Log file: %BACKUP_LOG_FILE%

Tagged with: , , ,
Publicado en Windows