Ejemplo de script en Windows de copia de seguridad: backup de la carpeta Nextcloud y 2 unidades de red en carpetas de una unidad externa

Vamos a crear un script por lotes en Windows que realizará una copia de seguridad incremental (copia todos los archivos que han cambiado desde la última copia completa. Al igual que la copia incremental, no elimina archivos en el destino) y recursiva (se refiere a la acción de copiar no solo un directorio específico, sino también todos sus subdirectorios y archivos contenidos dentro de ellos) de la carpeta de NextCloud y de un par de unidades de red, almacenando los datos en carpetas de una unidad externa. Para ello:

  • Abre el Bloc de notas o cualquier editor de texto.
    - Copia y pega el siguiente código en el editor:

Versión con xcopy

@echo off
setlocal

:: Configura las rutas
set "nextcloud_folder=C:\Users\TU_USUARIO\Nextcloud"
set "backup_folder=Z:\Backup\Nextcloud"
set "network_drive_1=Z:\Unidad1"
set "network_drive_2=Y:\Unidad2"
set "backup_network_drive_1=Z:\Backup\Red\Unidad1"
set "backup_network_drive_2=Z:\Backup\Red\Unidad2"

:: Crea la carpeta de respaldo en la unidad externa si no existe
if not exist "%backup_folder%" (
    mkdir "%backup_folder%"
)

if not exist "%backup_network_drive_1%" (
    mkdir "%backup_network_drive_1%"
)

if not exist "%backup_network_drive_2%" (
    mkdir "%backup_network_drive_2%"
)

:: Copia la carpeta de Nextcloud
xcopy "%nextcloud_folder%\*" "%backup_folder%\" /E /I /Y

:: Copia las unidades de red
xcopy "%network_drive_1%\*" "%backup_network_drive_1%\" /E /I /Y
xcopy "%network_drive_2%\*" "%backup_network_drive_2%\" /E /I /Y

echo Copia de seguridad completada.
pause
endlocal

Desglose del script

@echo off: Evita que se muestren los comandos en la consola durante la ejecución del script.
setlocal: Inicia un bloque de variables locales, lo que permite que las variables definidas no afecten al entorno global.
set: Define las rutas de las carpetas y unidades que deseas respaldar, incluyendo la carpeta de Nextcloud y las unidades de red.
if not exist: Verifica si la carpeta de respaldo en la unidad externa Z: existe y la crea si no es así.
xcopy: Copia los archivos y carpetas. Las opciones utilizadas son:
/E: Copia todos los subdirectorios, incluidos los vacíos.
/I: Si el destino no existe y se está copiando más de un archivo, asume que el destino debe ser una carpeta.
/Y: Suprime la confirmación al sobrescribir archivos existentes.
echo: Muestra un mensaje en la consola indicando que la copia de seguridad se ha completado.
pause: Pausa la ejecución para que puedas ver el mensaje antes de cerrar la ventana, permitiendo que el usuario confirme que la operación se realizó correctamente.

Guardar y ejecutar el script

- Guarda el archivo con la extensión .bat, por ejemplo, copia_seguridad.bat.
- Ejecuta el archivo haciendo doble clic en él. Asegúrate de que la unidad Z: esté conectada y accesible.

Este script creará las carpetas necesarias en la unidad externa y realizará la copia de seguridad de la carpeta de Nextcloud en Windows y de las unidades de red especificadas. Asegúrate de ajustar las rutas según sea necesario.

Versión con robocopy

Realiza la misma operación, pero cambia el código del script por este:

@echo off
setlocal

:: Configura las rutas
set "nextcloud_folder=C:\Users\TU_USUARIO\Nextcloud"
set "backup_folder=Z:\Backup\Nextcloud"
set "network_drive_1=Z:\Unidad1"
set "network_drive_2=Y:\Unidad2"
set "backup_network_drive_1=Z:\Backup\Red\Unidad1"
set "backup_network_drive_2=Z:\Backup\Red\Unidad2"

:: Crea la carpeta de respaldo en la unidad externa si no existe
if not exist "%backup_folder%" (
    mkdir "%backup_folder%"
)

if not exist "%backup_network_drive_1%" (
    mkdir "%backup_network_drive_1%"
)

if not exist "%backup_network_drive_2%" (
    mkdir "%backup_network_drive_2%"
)

:: Copia la carpeta de Nextcloud
robocopy "%nextcloud_folder%" "%backup_folder%" /E /COPY:DAT /R:3 /W:5

:: Copia las unidades de red
robocopy "%network_drive_1%" "%backup_network_drive_1%" /E /COPY:DAT /R:3 /W:5
robocopy "%network_drive_2%" "%backup_network_drive_2%" /E /COPY:DAT /R:3 /W:5

echo Copia de seguridad completada.
pause
endlocal

Desglose de opciones utilizadas

/E: Copia todos los subdirectorios, incluidos los vacíos.
/COPY:DAT: Copia solo los datos, atributos y marcas de tiempo, similar a lo que haría xcopy.
/R:3: Reintenta copiar un archivo hasta 3 veces en caso de error.
/W:5: Espera 5 segundos entre reintentos.

Comportamiento

Con este script, robocopy copiará los archivos y carpetas de la carpeta de origen a la carpeta de destino sin eliminar los archivos que ya están en la carpeta de destino. Esto permite que el comportamiento sea similar al de xcopy, manteniendo los archivos no modificados en la carpeta de destino.

NOTA: Script mejorado, con resumen de la actividad

<code class="language-text">@echo off
setlocal

:: Configura las rutas
set "nextcloud_folder=C:\Users\TU_USUARIO\Nextcloud"
set "backup_folder=Z:\Backup\Nextcloud"
set "network_drive_1=Z:\Unidad1"
set "network_drive_2=Y:\Unidad2"
set "backup_network_drive_1=Z:\Backup\Red\Unidad1"
set "backup_network_drive_2=Z:\Backup\Red\Unidad2"

:: Crea la carpeta de respaldo en la unidad externa si no existe
if not exist "%backup_folder%" (
    mkdir "%backup_folder%"
)

if not exist "%backup_network_drive_1%" (
    mkdir "%backup_network_drive_1%"
)

if not exist "%backup_network_drive_2%" (
    mkdir "%backup_network_drive_2%"
)

:: Copia la carpeta de Nextcloud
robocopy "%nextcloud_folder%" "%backup_folder%" /E /COPY:DAT /R:3 /W:5
echo Copiada la carpeta de Nextcloud a %backup_folder%.

:: Copia las unidades de red
robocopy "%network_drive_1%" "%backup_network_drive_1%" /E /COPY:DAT /R:3 /W:5
echo Copiada la unidad de red 1 a %backup_network_drive_1%.

robocopy "%network_drive_2%" "%backup_network_drive_2%" /E /COPY:DAT /R:3 /W:5
echo Copiada la unidad de red 2 a %backup_network_drive_2%.

:: Resumen de la actividad
echo.
echo Resumen de la copia de seguridad:
echo ---------------------------------
echo Carpeta de Nextcloud: %nextcloud_folder% -> %backup_folder%
echo Unidad de red 1: %network_drive_1% -> %backup_network_drive_1%
echo Unidad de red 2: %network_drive_2% -> %backup_network_drive_2%
echo.
echo Copia de seguridad completada.
pause
endlocalcode>

Añadir otra carpeta a la copia, por ejemplo la carpeta Documentos (Documents) del usuario:

@echo off
setlocal

:: Configura las rutas
set "nextcloud_folder=C:\Users\TU_USUARIO\Nextcloud"
set "documents_folder=C:\Users\TU_USUARIO\Documents"  :: Nueva ruta para la carpeta de Documentos
set "backup_folder=Z:\Backup\Nextcloud"
set "network_drive_1=Z:\Unidad1"
set "network_drive_2=Y:\Unidad2"
set "backup_network_drive_1=Z:\Backup\Red\Unidad1"
set "backup_network_drive_2=Z:\Backup\Red\Unidad2"
set "backup_documents=Z:\Backup\Red\Documentos"  :: Ruta para la copia de Documentos

:: Crea la carpeta de respaldo en la unidad externa si no existe
if not exist "%backup_folder%" (
    mkdir "%backup_folder%"
)

if not exist "%backup_network_drive_1%" (
    mkdir "%backup_network_drive_1%"
)

if not exist "%backup_network_drive_2%" (
    mkdir "%backup_network_drive_2%"
)

if not exist "%backup_documents%" (  :: Crear carpeta para Documentos si no existe
    mkdir "%backup_documents%"
)

:: Copia la carpeta de Nextcloud
robocopy "%nextcloud_folder%" "%backup_folder%" /E /COPY:DAT /R:3 /W:5
echo Copiada la carpeta de Nextcloud a %backup_folder%.

:: Copia las unidades de red
robocopy "%network_drive_1%" "%backup_network_drive_1%" /E /COPY:DAT /R:3 /W:5
echo Copiada la unidad de red 1 a %backup_network_drive_1%.

robocopy "%network_drive_2%" "%backup_network_drive_2%" /E /COPY:DAT /R:3 /W:5
echo Copiada la unidad de red 2 a %backup_network_drive_2%.

:: Copia la carpeta de Documentos
robocopy "%documents_folder%" "%backup_documents%" /E /COPY:DAT /R:3 /W:5
echo Copiada la carpeta de Documentos a %backup_documents%.

:: Resumen de la actividad
echo.
echo Resumen de la copia de seguridad:
echo ---------------------------------
echo Carpeta de Nextcloud: %nextcloud_folder% -> %backup_folder%
echo Unidad de red 1: %network_drive_1% -> %backup_network_drive_1%
echo Unidad de red 2: %network_drive_2% -> %backup_network_drive_2%
echo Carpeta de Documentos: %documents_folder% -> %backup_documents%
echo.
echo Copia de seguridad completada.
pause
endlocal