Script Batch para generar respaldos automáticos

Estándar

Tener un respaldo de nuestra información, ya sea personal o laboral siempre es importante, nunca sabemos a ciencia cierta cuando algo puede fallar o se puede presentar algun problema. Es por ello que un backup será nuestro mejor aliado ante las dificultades.

Pero seamos sinceros, muchos de los programas de backup o respaldo tienen demasiadas características que podrán ser ideales para entornos empresariales o corporativos bastante grandes, pero en aspectos más bien personales, de negocio o empresa pequeña no son necesarias, es por ello que escribí este sencillo script que me solucinó el problema principal al que me enfrenté en el trabajo.

Trataré de explicar brevemente qué es lo que realiza este script:

  1. Crea una carpeta temporal que es donde guardaremos la información y posteriormente se comprimirá
  2. Esta carpeta tendrá el nombre de usuario del equipo y la fecha en que se hace el respaldo
  3. Copiará la información que deseamos respaldar a la carpeta
  4. Comprime la carpeta en formato 7z
  5. Elimina la carpeta en que pusimos los archivos y luego comprimimos, pues ya no hay necesidad de tenerla ocupando espacio
  6. Envía el archivo comprimido al destino donde lo hemos de almacenar, en el caso del script, al servidor de la empresa.
  7. Finalmente elimina el archivo 7z temporal una vez que se encuentra seguro en su destino final

Obviamente, este script no es ejecutarlo y ya, deben modificarlo a sus necesidades. Poner las carpetas que desean respaldar, programar una tarea para que se ejecute cada cierto tiempo, etc. En fin, les dejo aquí el script:

:: Sistema de respaldo automátizado
:: Versión 0.4
:: Fecha de Creación 11/Ago/2014
:: Script escrito por Mauricio 'Maw' Cerón

@echo off

:: Define la fecha actual
for /f "tokens=1-3 delims=/ " %%a in ("%date% /t") do set mydate=%%a%%b%%c

:: Creación de carpeta temporal
cd %TEMP%
md %username%_backup-%mydate%

:: Copia de archivos a carpeta temporal
cd %USERPROFILE%
robocopy %userprofile%\documents\ %TEMP%\%username%_backup-%mydate%\documents\ /MIR /R:0 >nul 2>nul
robocopy %userprofile%\AppData\Local\Microsoft\Outlook\ %TEMP%\%username%_backup-%mydate%\Outlook\ /MIR /R:0 >nul 2>nul

:: Compresión del respaldo
cd %TEMP%
7z a %username%_backup-%mydate%.7z "%TEMP%\%username%_backup-%mydate%" >nul 2>nul

:: Elimina la carpeta temporal
rd /S /Q %username%_backup-%mydate% >nul 2>nul

:: Enviamos al Servidor y borramos del equipo local
robocopy %TEMP% \\Srvbusiness\sistemas\docume~1\backup\ %username%_backup-%mydate%.7z >nul 2>nul
del /Q %username%_backup-%mydate%.7z >nul 2>nul

Solo deben copiarlo, modificarlo y guardarlo en el bloc de notas de windows con extensión cmd o bat y agregarlo al programador de tareas. Si desean comprimir en 7z recuerden que deben tener 7zip instalado en su equipo y haberlo agregado a su PATH de Windows (puede sonar obvio, pero nunca está de más mencionarlo).

Por otra parte, si lo que quieren es que se ejecute en segundo plano copien lo siguiente en un bloc de notas en blanco y guardenlo con la extensión vbs:

Dim WinScriptHost
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "%userprofile%\backup.cmd" & Chr(34), 0
Set WinScriptHost = Nothing

La parte entrecomillada es donde pondrán la ruta a su archivo cmd o bat, y agreguen este script al programador de tareas en lugar del anterior y se ejecutará en segundo plano si mostrar ningún tipo de ventana.

Creo que es suficiente, no quiero hacerlo parecer más complicado de lo que realmente es. Cualquier duda, pregunta o sugerencia me la hacen saber, ya saben que me gusta ayudar 😀

Anuncios

9 comentarios en “Script Batch para generar respaldos automáticos

  1. miguguel rodriguez

    hola la verdad soy nuevo en esto entendi la forma como opera per no e podido modificarlo a mi requerimiento

    mi situacion es esta:

    ya tengo una carpeta con el archivo que quiero comprimir es una carpeta fija con varios archivos pero no logro que me comprima la carpeta completa o los archivos que estén en ella quiero que esto se haga automáticamente al yo ejecutar un .bat son copias de seguridad de bd sql

    • No estoy seguro de si esto es lo que requieres, pero veamos…

      Supongamos que tienes tu carpeta en C:\SQL\BD y quieres comprimir todo el contenido de la carpeta BD a un archivo llamado backupBD.7z, la parte de la compresión del respaldo debería quedar algo así:

      7z a backupBD.7z “C:\SQL\BD” >nul 2>nul

      Eso debería comprimir el contenido de la carpeta.

  2. no entiendo esta parte amigo cd %USERPROFILE%
    robocopy %userprofile%\documents\ %TEMP%\%username%_backup-%mydate%\documents\ quiero copiar una carpeta a la carpeta que se creo en mi caso la carpeta esta en la direccion siguiente C:\Respaldo y la carpeta que genera temportal mente es esta
    :: Creación de carpeta temporal
    cd %C:\Documents and Settings\Propietario\Escritorio\respaldos%
    md %username%_backup-%mydate% pero asi como tu lo pones de userporfile no entiendo me podrias ayudar por favor

    • Ok, antes que nada déjame darte un consejo, si no has entendido como funciona un script (sea el que sea) no lo empieces a modificar porque después te va a complicar mas de lo que debía. Ahora vamos a tu duda.

      Escribir cd %userprofile% es lo mismo que escribir cd C:\Documents and Settings\Propietario\ es decir, son variables del sistema y por ello están entre signos de porcentaje y permiten que el script sea ejecutado en diferentes sistemas sin muchos problemas, ya que mientras en Windows XP es C:\Documents and Settings\Propietario en Windows 7 es C:\Usuarios\Propietario.

      En la parte de la creación de la carpeta temporal te recomiendo no modificar nada, déjala tal cual está en el script.

      Ahora las partes que debes modificar es lo correspondiente a los archivos que vas a respaldar, y el destino del archivo final. Supongamos que quieres respaldar tus documentos, música, imágenes y escritorio. Debes agregar una instrucción por cada carpeta de la siguiente forma:

      robocopy carpeta_a_copiar carpeta_temporal /MIR /R:0 >nul 2>nul

      En especifico aquí lo único que tendría que cambiar es la carpeta_a_copiar quedando de cualquiera de las siguientes formas:

      robocopy %userprofile%\documents\ %TEMP%\%username%_backup-%mydate%\documents\ /MIR /R:0 >nul 2>nul

      robocopy C:\Documents and Settings\Propietario\Documentos\ %TEMP%\%username%_backup-%mydate%\documents\ /MIR /R:0 >nul 2>nul

      Si lo notas, cuando pongo el path completo ya no utilizo los %%, ya que solo se usan para las variables. Por último determinamos donde se almacenará el archivo de respaldo, en tu caso por lo que veo lo vas a guardar en C:\Respaldo por lo que la instrucción de enviar al servidor puedes modificarla de la siguiente forma:

      robocopy %TEMP% C:\Respaldo\ %username%_backup-%mydate%.7z >nul 2>nul

      Recuerda que antes de modificar cualquier script o código primero debes entender qué función realiza cada instrucción. Espero haber ayudado a resolver tus dudas.

  3. hola, muy buen script, yo teng uno sensillo pero solo copia el archivo a su destino y nada mas. Me gustaria saber hacer scripts mas complejos como este, que conocimientos deberia tener para poder llegar a hacerlos?

    Saludos.

    • Supongo que lo básico sería poder crear algoritmos para resolver un problema, y así determinar el proceso a seguir y el resto ya depende de lo que deseas que se ejecute y las herramientas que quieras utilizar.

  4. Jox

    Me quedo perdido en todo :c , alguna cosa que me recomiendes para entender todo ese script que la verdad me ayudaria mucho, realmente quisiera aprenderlo veo que es de gran utilidad , pero no entiendo desde la fecha hasta abajo :c

    • Todos los comandos que utiliza a exceptuando el 7z pertenecen a la linea de comandos de Windows, puedes verificar como funciona cada uno de ellos y entender su sintaxis para comprender que realiza cada uno en el script, de cualquier forma los comentarios en el script (los que inician con :: ) te dan una idea general de que realiza cada parte

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s