viernes, 17 de julio de 2026

Automatiza tus copias de seguridad ( para windows )

Ilustración tecnológica sobre la automatización de copias de seguridad en Windows mediante PowerShell y Robocopy, mostrando una consola de PowerShell, un disco de respaldo y un escudo de protección de datos.


Windows dentro de su sabiduría de repente decide instalar una actualización en el mejor momento posible, tu ordenador se reinicia de golpe y, al volver, ese documento crucial ha volado!


En  Windows a menudo se vive con una falsa sensación de seguridad ya que la gente se confía en que la nube lo sincroniza todo o que un simple "copiar y pegar" de vez en cuando en un pendrive es suficiente. Ya dijimos en el post anterior que hacer backups de forma manual es aburrido, ineficiente y siempre se nos olvida por lo que sea.

Hoy vamos a trabajar eso y prometo que no llevará más de 10 min. ni vamos a usar programas pesados de terceros que te llenan el ordenador de ******!! 
Vamos a crear un script con PowerShell y una herramienta que los que se inician en la informática ni saben de su existencia, Robocopy. Además lo dejaremos programado para que se ejecute el solito en segundo plano mientras echas tu partida o estudias. 

Empezamos?


El arma secreta de los administradores de sistemas: Robocopy 

Muchos usuarios de Windows recurren a scripts básicos con comandos como xcopy o Copy-Item de PowerShell (yo era uno de ellos). El problema es que vuelven a copiar absolutamente todo cada vez que los ejecutas. Si tienes 50 GB de copia entre fotos, apuntes o yo que sé, tu backup tardará media hora en completarse todos los días, desgastando además tu disco duro de forma innecesaria.


Esto lo solucionamos esto con  Robocopy (Robust File Copy). Además es nativa y funciona por línea de comandos es incremental y extremadamente robusta. 

  • Compara la carpeta de origen con la de destino (a que os suena de linux?)
  • Identifica los archivos nuevos, los cambios y los borrados.
  • Transfiere únicamente las modificaciones en segundos.

Algo que mola mucho es que tolera cortes de red, reintenta la copia si un archivo está bloqueado temporalmente y mantiene intactos los metadatos y fechas originales de los archivos.


El Script en PowerShell 

Vamos a escribir un script .ps1 que no solo va a usar Robocopy para hacer la copia sino que va a comprobar si el disco de destino está conectado y así además evitamos errores si te has dejado el disco externo en la mochila...

Abre tu editor de código favorito (en mi caso Visual Studio Code) o también puedes usar utilizando el buscador de Windows y escribe PowerShell ISE.

Creamos un archivo nuevo y lo guardamos como backup_windows.ps1 en una carpeta, por ejemplo, en C:\Scripts\


Copia y pega el siguiente código, después dejaré una leyenda por si hay algo que no se entiende:


# ================================================================
# SCRIPT DE COPIA DE SEGURIDAD INCREMENTAL (ROBOCOPY + POWERSHELL)
# ================================================================

# --- CONFIGURACION DE RUTAS (cada uno su ruta) ---
$Origen  = "C:\Users\TuUsuario\Documents\Proyectos"
$Destino = "E:\Backups_Espejo" # disco externo, segundo SSD, etc
$LogFile = "C:\Users\TuUsuario\Documents\backup_log.txt"

# sacamos la fecha actual para el encabezado del log
$FechaActual = Get-Date -Format "yyyy-MM-dd HH:mm:ss"

Add-Content -Path $LogFile -Value "=================================================="
Add-Content -Path $LogFile -Value "[$FechaActual] Creando copia de seguridad..."

# 1. validamos que la carpeta origen existe
if (-not (Test-Path -Path $Origen)) {
    Add-Content -Path $LogFile -Value "[$FechaActual] ERROR: El origen '$Origen' no existe o no esta conectado."
    Exit
}

# 2. validamos que el destino esta disponible
if (-not (Test-Path -Path $Destino)) {
    Add-Content -Path $LogFile -Value "[$FechaActual] ERROR: El destino '$Destino' no existe o no esta conectado. ¡Abortando backup!"
    Exit
}

# 3. sincronizacion incremental con Robocopy
$Parametros = @("$Origen", "$Destino", "/MIR", "/FFT", "/R:3", "/W:5", "/NP", "/LOG+:$LogFile")

& robocopy.exe @Parametros

# guardamos el final del proceso
$FechaFin = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
Add-Content -Path $LogFile -Value "[$FechaFin] Proceso de backup finalizado."
Add-Content -Path $LogFile -Value "========================================="


Al principio usar Robocopy puede parecer lioso pero es cuestión de practicar. Los parámetros que he utilizado son:

  • /MIR - Crea un espejo exacto del origen en el destino (cuidado, también borra en el destino si se borra en origen!)
  • /FFT - Asume marcas de tiempo FAT (importante para evitar fallos si tu usb usa exFAT o FAT32)
  • /R:3 - Si un archivo está bloqueado por otro programa, lo reintenta copiar un máximo de 3 veces
  • /W:5 - Espera 5 segundos entre reintentos 
  • /NP - Desactiva el indicador de porcentaje de progreso para no llenar el log
  • /LOG+ - Añade los resultados detallados al log sin borrar el historial anterior


¡Ojo! Cambia "TuUsuario" carpetas en las que vayas a trabajar y las letras de unidad (E:, C:) que utilices.


Automatización silenciosa con el Programador de Tareas

Ya tenemos el script que hace ahorrarnos tiempo, ahora queremos que Windows lo ejecute de forma invisible, por ejemplo, todos los días a las 22:00.

Para esto de forma pro y evitar que aparezca alguna pantalla azul de la consola mientras estemos jugando o estudiando vamos a hacer lo siguiente:

1)  Pulsa la tecla de Windows, escribe Programador de tareas y ábrelo.
2)  En el panel derecho hacemos clic en Crear tarea... ("tarea básica" NO! necesitamos configurar opciones avanzadas de ejecución).
3)  En la pestaña General:

  • Ponle un nombre claro, como Sincronizacion_Backup_Proyectos
  • En la parte inferior, marca la casilla Ejecutar con los privilegios más altos (importante para que Robocopy acceda a ciertos metadatos del sistema)
  • Selecciona la opción Ejecutar tanto si el usuario inició sesión como si no. Esto obliga a Windows a ejecutar el script en segundo plano de forma totalmente invisible.

4)  Ve a la pestaña Desencadenadores (Triggers) y haz clic en Nuevo:

  • Configura cuándo quieres que se ejecute (dijimos que Diariamente a las 22:00).

5)  Ve a la pestaña Acciones y haz clic en Nueva:

  • En Acción, selecciona Iniciar un programa.
  • En Programa o script, escribe: powershell.exe
  • En la casilla Agregar argumentos (opcional), añade la siguiente línea (cambia la ruta por la ubicación real de tu script):
    • -ExecutionPolicy Bypass -WindowStyle Hidden -File "C:\Scripts\backup_windows.ps1"

6)  Haz clic en Aceptar. Windows te pedirá la contraseña de tu usuario para asegurarse de que tienes permisos para programar tareas del sistema en segundo plano.


El argumento -ExecutionPolicy Bypass le dice a Windows que permita ejecutar este script saltándose temporalmente la política de bloqueo por defecto de PowerShell contra scripts de origen desconocido. Método seguro siempre y cuando SOLO ejecutes scripts que TU mismo hayas programado.


Conclusión

Hacer copias de seguridad en Windows ya veis que no necesitas instalar programas de dudosa procedencia ni nada raro, con unas pocas líneas de PowerShell y  Robocopy nos hemos montado un sistema de backup de nivel semi-pro funcionando en el pc de forma gratuita y sigilosa.

Toma el control de tus copias, configura tu script hoy mismo y duerme con la tranquilidad de que tu trabajo está a salvo de cualquier pantallazo azul o borrado accidental. 


>_Saludos!



No hay comentarios:

Publicar un comentario

Automatiza tus copias de seguridad ( para windows )

Windows dentro de su sabiduría de repente decide instalar una actualización en el mejor momento posible, tu ordenador se reinicia de golpe y...