Copia seguridad con archivos .bat (en Windows)

Foro para webmasters: Navegadores web, buscadores, aplicaciones de escritorio y recursos varios...
Responder
gbeltran
Mensajes: 259
Registrado: 13 May 2023, 01:15
Ubicación: Valencia - España
Contactar:

Copia seguridad con archivos .bat (en Windows)

Mensaje por gbeltran »

- Inicio en Windows con el Administrador de discos un disco SSD en MBR, con formato exFat, y le asigno la letra de unidad Z:
- Creo el batch (archivo .bat) de copia de seguridad (copia de los documentos de Nextcloud):

Código: Seleccionar todo

@echo off
Title Copia de Seguridad
echo              =========================================
echo              =                                       =
echo              =         Copia de Seguridad            =
echo              =                                       =
echo              =========================================
echo.
echo Este comando copiara la carpeta de Nextcloud, en este caso, dentro de una nombrada BACKUP en la unidad Z
pause
@echo off

ROBOCOPY %userprofile%\Nextcloud  Z:\BACKUP\Documentos\  /S  /R:0 /w:0

IF ERRORLEVEL 5      GOTO C
IF NOT ERRORLEVEL   5     GOTO Z


:C
cls
@echo off
echo La unidad Z no esta disponible la carpeta BACKUP se creara en la unidad C
pause

ROBOCOPY %userprofile%\Documents  Z:\BACKUP\Documentos\  /S
echo Revise el informe de la copia realizada
pause
:Z
- Ejecuto y listo: copia de seguridad recursiva.
Última edición por gbeltran el 26 Jul 2024, 13:04, editado 1 vez en total.
gbeltran
Mensajes: 259
Registrado: 13 May 2023, 01:15
Ubicación: Valencia - España
Contactar:

Re: Copia seguridad con archivos .bat (en Windows)

Mensaje por gbeltran »

Sin interacción del usuario (comentamos la orden pause):

Código: Seleccionar todo

@echo off
Title Copia de Seguridad
echo              =========================================
echo              =                                       =
echo              =         Copia de Seguridad            =
echo              =                                       =
echo              =========================================
echo.
echo Este comando copiara la carpeta Mis Documentos dentro de una nombrada BACKUP en la unidad Z
[b]REM pause[/b]
@echo off

ROBOCOPY %userprofile%\Nextcloud  Z:\BACKUP\Documentos\  /S  /R:0 /w:0

IF ERRORLEVEL 5      GOTO C
IF NOT ERRORLEVEL   5     GOTO Z


:C 
cls
@echo off
echo La unidad Z no esta disponible la carpeta BACKUP se creara en la unidad C
pause

ROBOCOPY %userprofile%\Documents  Z:\BACKUP\Documentos\  /S
echo Revise el informe de la copia realizada
pause
:Z
Luego, con el administrador de tareas de Windows podemos programar la tarea para que se ejecute de forma periódica a la hora que queramos. Recordar poner la compatibilidad para la versión de Windows que tengamos.
Última edición por gbeltran el 26 Jul 2024, 13:05, editado 1 vez en total.
gbeltran
Mensajes: 259
Registrado: 13 May 2023, 01:15
Ubicación: Valencia - España
Contactar:

Re: Copia seguridad con archivos .bat (en Windows)

Mensaje por gbeltran »

Sigue funcionando la programación perfectamente:
programador_tareas_windows.jpg
programador_tareas_windows.jpg (56.03 KiB) Visto 1927 veces
gbeltran
Mensajes: 259
Registrado: 13 May 2023, 01:15
Ubicación: Valencia - España
Contactar:

Re: Copia seguridad con archivos .bat (en Windows)

Mensaje por gbeltran »

Y una versión para Linux (me falta la programación como tarea): viewtopic.php?t=316
gbeltran
Mensajes: 259
Registrado: 13 May 2023, 01:15
Ubicación: Valencia - España
Contactar:

Re: Copia seguridad con archivos .bat (en Windows)

Mensaje por gbeltran »

Una variante que copia la carpeta Documentos, Dropbox y Nextcloud de tu usuario a una carpeta en disco duro externo.

Código: Seleccionar todo

@echo off
Title Copia de Seguridad
echo              =========================================
echo              =                                       =
echo              =         Copia de Seguridad            =
echo              =                                       =
echo              =========================================
echo.
echo Este comando copiara la carpeta Mis Documentos, Nextcloud y tu Dropbox dentro de una nombrada Backup en la unidad Z
REM pause
@echo off
 
ROBOCOPY %userprofile%\Documents  Z:\Backup  /S  /R:0 /w:0
ROBOCOPY %userprofile%\Dropbox Z:\Backup\Dropbox  /S  /R:0 /w:0
ROBOCOPY %userprofile%\Nextcloud  Z:\Backup\Nextcloud\  /S  /R:0 /w:0
 
IF ERRORLEVEL 2      GOTO C
IF NOT ERRORLEVEL   2     GOTO Z
 
 
:C 
cls
@echo off
echo La unidad Z no esta disponible. Se crearán en C:\Backup2
pause
 
ROBOCOPY %userprofile%\Documents  C:\Backup\ /S
ROBOCOPY %userprofile%\Dropbox C:\Backup\Dropbox  /S  /R:0 /w:0
ROBOCOPY %userprofile%\Nextcloud C:\Backup\Nextcloud  /S  /R:0 /w:0
echo Revise el informe de la copia realizada
pause
:Z
NOTA: En el script original tenía el error del número de error: estaba a 5. Ahora está a 2. Esta es la explicación:
Parece que hay un problema con la forma en que tu script verifica el error después de los comandos `ROBOCOPY`. En tu script, estás usando `IF ERRORLEVEL 5 GOTO C` y `IF NOT ERRORLEVEL 5 GOTO Z`.

El comando `IF ERRORLEVEL n` en batch script comprueba si el nivel de error es `n` o más. Entonces, `IF ERRORLEVEL 5` se traduce a "si el nivel de error es 5 o más".

`ROBOCOPY` devuelve `1` si se copiaron archivos con éxito y `0` si no se necesitaba copiar ningún archivo. Los códigos de error de `2` a `16` indican varios errores. Por lo tanto, tu script saltará a la etiqueta `:C` si `ROBOCOPY` devuelve `5` o más, lo que indica un error.

Por otro lado, `IF NOT ERRORLEVEL 5` se traduce a "si el nivel de error es menos de 5". Por lo tanto, incluso si `ROBOCOPY` se ejecuta con éxito y copia los archivos (devolviendo `1`), tu script saltará a la etiqueta `:Z`.

Para solucionar este problema, puedes cambiar tu script para que salte a la etiqueta `:Z` solo si `ROBOCOPY` devuelve `0` o `1`, lo que indica que no hubo errores.
Guillermo
Site Admin
Mensajes: 200
Registrado: 13 May 2023, 00:32
Ubicación: Valencia - España
Contactar:

Re: Copia seguridad con archivos .bat (en Windows)

Mensaje por Guillermo »

Otra opción, sin control de errores y con log al final:

Código: Seleccionar todo

@echo off
Title Copia de Seguridad
echo              =========================================
echo              =                                       =
echo              =         Copia de Seguridad            =
echo              =                                       =
echo              =========================================
echo.
echo Este comando copiara la carpeta Mis Documentos dentro de una nombrada BACKUP en la unidad C
REM pause
@echo off

ROBOCOPY %userprofile%\Nextcloud  C:\BACKUP\Documentos\  /S  /R:0 /w:0 /LOG+:C:\BACKUP\robocopy.log

cls
@echo off
echo Copia realizada. Puedes cerrar esta ventana.
pause
La opción /LOG+ añadirá la salida del comando ROBOCOPY al archivo de registro especificado: /LOG+:C:\BACKUP\robocopy.log

Probar esto para crear el archivo de log y ver también el proceso en la consola:

Código: Seleccionar todo

ROBOCOPY %userprofile%\Nextcloud  C:\BACKUP\Documentos\  /S  /R:0 /w:0 >> C:\BACKUP\robocopy.log 2>&1
gbeltran
Mensajes: 259
Registrado: 13 May 2023, 01:15
Ubicación: Valencia - España
Contactar:

Re: Copia seguridad con archivos .bat (en Windows)

Mensaje por gbeltran »

Otra opción. Esta vez para copiar la carpeta Documentos y Dropbox de tu usuario a una unidad (por ejemplo letra K), carpeta Backup y con creación de archivo de log (backup.log) en la misma carpeta de la unidad.

Código: Seleccionar todo

@echo off
Title Copia de Seguridad
echo              =========================================
echo              =                                       =
echo              =         Copia de Seguridad            =
echo              =                                       =
echo              =========================================
echo.

set SOURCE1=C:\Users\TuUsuario\Documents
set SOURCE2=C:\Users\TuUsuario\Dropbox\
set DEST=K:\Backup
set LOGFILE=backup.log

echo Este comando copiará la carpeta Mis Documentos y tu Dropbox dentro de una nombrada Backup en la unidad K
REM pause
@echo off

if exist K:\ (
    ROBOCOPY %SOURCE1%  %DEST%  /S  /R:0 /w:0 >> %LOGFILE%
    if ERRORLEVEL 1 echo Hubo un error al copiar %SOURCE1%. Consulta %LOGFILE% para más detalles.
    
    ROBOCOPY %SOURCE2% %DEST%\Dropbox  /S  /R:0 /w:0 >> %LOGFILE%
    if ERRORLEVEL 1 echo Hubo un error al copiar %SOURCE2%. Consulta %LOGFILE% para más detalles.
) else (
    echo La unidad K: no está disponible. Por favor, comprueba la conexión y vuelve a intentarlo.
)

cls
@echo off
echo Copia realizada. Pulsa cualquier tecla para cerrar.
pause
Y ahora el bat con solo una fuente (Mis Documentos):

Código: Seleccionar todo

@echo off
Title Copia de Seguridad
echo              =========================================
echo              =                                       =
echo              =         Copia de Seguridad            =
echo              =                                       =
echo              =========================================
echo.

set SOURCE1=C:\Users\TuUsuario\Documents
REM También puede ser set SOURCE1=%userprofile%\Documents
set DEST=K:\Backup
set LOGFILE=backup.log

echo Este comando copiará la carpeta Mis Documentos dentro de una nombrada Backup en la unidad K
@echo off

if exist K:\ (
    ROBOCOPY %SOURCE1%  %DEST%  /S  /R:0 /w:0 >> %LOGFILE%
    if ERRORLEVEL 1 echo Hubo un error al copiar %SOURCE1%. Consulta %LOGFILE% para más detalles.
) else (
    echo La unidad K: no está disponible. Por favor, comprueba la conexión y vuelve a intentarlo.
)

cls
@echo off
echo Copia realizada. Pulsa cualquier tecla para cerrar.
pause
gbeltran
Mensajes: 259
Registrado: 13 May 2023, 01:15
Ubicación: Valencia - España
Contactar:

Re: Copia seguridad con archivos .bat (en Windows)

Mensaje por gbeltran »

Otra versión de batch que sincroniza archivos modificados y elimina los eliminados (con opción /MIR)

Para copiar solo los archivos y directorios modificados y sincronizar todos los contenidos, eliminando los que se hayan borrado en la fuente original, puedes usar las opciones /MIR y /PURGE de ROBOCOPY.

Ejemplo:

Código: Seleccionar todo

@echo off
Title Copia de Seguridad
echo =========================================
echo =                                      =
echo =          Copia de Seguridad          =
echo =                                      =
echo =========================================
echo Este comando copiara la carpeta Mis Documentos dentro de una nombrada BACKUP en la unidad Z
REM pause

REM Verificar si la unidad Z: está disponible
IF EXIST Z:\ (
    ROBOCOPY %userprofile%\Nextcloud  Z:\BACKUP\Documentos\  /MIR /R:0 /W:0 /LOG+:Z:\BACKUP\robocopy.log
    echo Copia realizada. Pulsa cualquier tecla para cerrar.
) ELSE (
    echo La unidad Z: no esta disponible. Por favor, verifica la conexion y vuelve a intentarlo.
)

pause
Explicación de las opciones:
- /MIR: Esta opción hace que ROBOCOPY refleje (mirror) el directorio de origen en el directorio de destino. Esto incluye la eliminación de archivos en el destino que ya no existen en el origen.
- /R:0: Número de reintentos en caso de error (0 en este caso).
- /W:0: Tiempo de espera entre reintentos (0 segundos en este caso).
- /LOG+: Añade la salida al archivo de log especificado.

NOTA IMPORTANTE:

La diferencia entre las opciones /S y /MIR en ROBOCOPY puede ser sutil pero importante:

- /S: Esta opción copia todos los subdirectorios, excepto los vacíos. Esto significa que copiará todos los archivos y carpetas dentro de la carpeta de origen, pero no eliminará archivos o carpetas en el destino que ya no existen en el origen.

- /MIR: Esta opción es una combinación de /E (copia todos los subdirectorios, incluidos los vacíos) y /PURGE (elimina archivos y directorios en el destino que ya no existen en el origen). En otras palabras, /MIR asegura que el destino sea una imagen especular exacta del origen, incluyendo la eliminación de archivos y carpetas que ya no están presentes en el origen.

En resumen, mientras que /S solo copia archivos y carpetas nuevas o modificadas, /MIR también se asegura de que el destino se mantenga sincronizado con el origen, eliminando cualquier archivo o carpeta que ya no exista en el origen.
gbeltran
Mensajes: 259
Registrado: 13 May 2023, 01:15
Ubicación: Valencia - España
Contactar:

Re: Copia seguridad con archivos .bat (en Windows)

Mensaje por gbeltran »

Ejemplo Script Batch de backup en 2 unidades

Código: Seleccionar todo

@echo off
Title Copia de Seguridad
echo =========================================
echo =                                      =
echo =          Copia de Seguridad          =
echo =                                      =
echo =========================================
echo.
echo Este comando copiará la carpeta Nextcloud dentro de una nombrada BACKUP en la unidad Z y en la unidad C
REM pause

REM Verificar si la unidad Z: está disponible
IF EXIST Z:\ (
    ROBOCOPY %userprofile%\Nextcloud Z:\BACKUP\Documentos\ /MIR /R:0 /w:0
    REM Esta opción es para crear un archivo de log e iría detrás de las anteriores, quedando /MIR /R:0 /w:0 /LOG+:Z:\BACKUP\robocopy.log
    echo Copia en Z: realizada.
) ELSE (
    echo La unidad Z: no está disponible. Por favor, verifica la conexión y vuelve a intentarlo.
)

REM Verificar si la unidad C: está disponible
IF EXIST C:\ (
    ROBOCOPY %userprofile%\Nextcloud C:\BACKUP\Documentos\ /MIR /R:0 /w:0
    REM Esta opción es para crear un archivo de log e iría detrás de las anteriores, quedando /MIR /R:0 /w:0 /LOG+:C:\BACKUP\robocopy.log
    echo Copia en C: realizada.
) ELSE (
    echo La unidad C: no está disponible. Por favor, verifica la conexión y vuelve a intentarlo.
)

pause
Responder