robocopy - Copia avanzada
Cuando quieres respaldar o replicar carpetas, copy y xcopy pueden quedarse cortos.
ROBOCOPY (Robust File Copy) es un potente comando de copia incluido en Windows. Ofrece replicación, copia incremental, control de reintentos y registro para copias fiables.
Este artículo explica robocopy desde lo básico hasta su uso práctico en copias de seguridad, con ejemplos de código.
Si solo quieres copiar una carpeta con todo su contenido, la forma básica es robocopy origen destino /E. Para que el destino sea una copia exacta, usa /MIR. Para valorar el resultado, consulta la sección de códigos de salida.
Sintaxis de robocopy
ROBOCOPY origen destino [archivo] [opciones]
| Elemento | Descripción |
|---|---|
| origen | Ruta de la carpeta de origen |
| destino | Ruta de la carpeta de destino |
| archivo | Nombre de archivo a copiar (admite comodines; por defecto *.*) |
| opciones | Opciones que controlan el comportamiento |
Ejemplo básico
robocopy C:\Source D:\Backup
Opciones principales
Opciones de copia
| Opción | Descripción |
|---|---|
/E | Copia subcarpetas, incluidas las vacías |
/S | Copia subcarpetas (sin las vacías) |
/MIR | Replica (elimina los archivos que no existen en el origen) |
/PURGE | Elimina del destino los archivos que ya no existen en el origen |
/MOV | Mueve archivos (elimina los originales tras copiar) |
/MOVE | Mueve archivos y carpetas |
/Z | Modo reiniciable (una copia interrumpida puede continuar) |
/MT:n | Copia con n hilos (1-128; 8 si se omite) |
/COPY:flags | Elige qué copiar (D: datos, A: atributos, T: marcas de tiempo, S: seguridad) |
Opciones de selección
| Opción | Descripción |
|---|---|
/XF archivo | Excluye los archivos indicados |
/XD carpeta | Excluye las carpetas indicadas |
/XO | Excluye archivos más antiguos (copia incremental) |
/MAXAGE:n | Excluye archivos con más de n días |
/MINAGE:n | Excluye archivos con menos de n días |
/MAX:n | Excluye archivos de más de n bytes |
/L | Muestra lo que se haría sin hacerlo |
Opciones de reintento
| Opción | Descripción |
|---|---|
/R:n | Reintentos en caso de error (por defecto: 1.000.000) |
/W:n | Espera entre reintentos en segundos (por defecto: 30) |
Opciones de registro
| Opción | Descripción |
|---|---|
/LOG:archivo | Escribe el registro en un archivo (sobrescribe) |
/LOG+:archivo | Añade el registro al final del archivo |
/TEE | Muestra la salida en consola y en el registro |
/NP | No muestra el porcentaje de progreso |
/NFL | No registra los nombres de archivo |
/NDL | No registra los nombres de directorio |
/V | Salida detallada |
El valor predeterminado de /R es 1.000.000 de reintentos. Si se pierde la conexión de red durante una copia, robocopy puede seguir reintentando durante mucho tiempo. En el uso real, indícalo siempre de forma explícita, por ejemplo /R:3.
Cuando una ruta entre comillas termina en \", la \ se interpreta como escape de la " y el argumento no se pasa correctamente. No escribas "C:\Mi Carpeta\"; escribe "C:\Mi Carpeta" sin la \ final.
Copiar con subcarpetas (/E)
La opción /E copia las subcarpetas de forma recursiva, incluidas las vacías.
robocopy C:\Source D:\Backup /E
Replicación (/MIR)
La opción /MIR reproduce exactamente la estructura de la carpeta de origen en el destino (combina /E y /PURGE). Los archivos que solo existen en el destino se eliminan.
robocopy C:\Source D:\Backup /MIR
/MIR elimina los archivos y carpetas que solo existen en el destino. Si te equivocas en la ruta de destino, pueden borrarse archivos no deseados. La primera vez, haz siempre una prueba con /L.
Ejecución de prueba (/L)
Con /L no se copia nada; robocopy solo muestra qué archivos se copiarían o eliminarían.
robocopy C:\Source D:\Backup /MIR /L
Haz siempre una prueba con /L antes de una copia de seguridad real, sobre todo con /MIR o /PURGE, para evitar borrados inesperados.
Acelerar la copia (/MT)
/MT:n copia varios archivos en paralelo. Es especialmente eficaz cuando hay muchos archivos pequeños.
robocopy C:\Source D:\Backup /E /MT:16
Con /MT, varios hilos escriben en el registro a la vez, por lo que el orden de las líneas puede mezclarse.
Registro
Cómo guardar los resultados de robocopy en un archivo de registro.
robocopy C:\Source D:\Backup /E /LOG:"C:\Logs\backup.log" /TEE /NP
| Opción | Descripción |
|---|---|
/LOG: | Indica el archivo de registro (sobrescribe) |
/TEE | Muestra la salida en la consola y en el registro |
/NP | Oculta los porcentajes de progreso (registro más limpio) |
Para añadir al final del registro, usa /LOG+:.
robocopy C:\Source D:\Backup /E /LOG+:"C:\Logs\backup.log" /TEE /NP
Excluir archivos y carpetas
Excluir archivos (/XF)
robocopy C:\Source D:\Backup /E /XF *.tmp *.log
Excluir carpetas (/XD)
robocopy C:\Source D:\Backup /E /XD "C:\Source\temp" "C:\Source\.git"
Ejemplo práctico: archivo por lotes de copia automática
Un archivo por lotes práctico de copia de seguridad con robocopy.
@echo off
setlocal
rem Configuracion de la copia
rem Nota: el formato de %DATE% depende de la configuracion regional. Este ejemplo supone aaaa/mm/dd.
set SOURCE=C:\Users\user\Documents
set DEST=D:\Backup\Documents
set LOGFILE=D:\Backup\Logs\backup_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.log
rem Crear la carpeta de registros si no existe
if not exist "D:\Backup\Logs" mkdir "D:\Backup\Logs"
echo Iniciando la copia de seguridad...
echo Origen: %SOURCE%
echo Destino: %DEST%
robocopy "%SOURCE%" "%DEST%" /MIR /R:3 /W:5 /LOG+:"%LOGFILE%" /TEE /NP /XD ".git" "node_modules"
rem Comprobar el codigo de salida
IF %ERRORLEVEL% LSS 8 (
echo La copia de seguridad se completo correctamente.
) ELSE (
echo Se produjo un error. Revisa el registro.
)
endlocal
Códigos de salida de robocopy
robocopy devuelve sus propios códigos de salida. A diferencia de la mayoría de los comandos, un código distinto de cero puede significar éxito. El código es una combinación de estos bits:
| Valor | Significado |
|---|---|
| 1 | Se copiaron correctamente uno o más archivos |
| 2 | Se encontraron archivos o carpetas adicionales en el destino |
| 4 | Se detectaron archivos o carpetas que no coinciden |
| 8 | Algunos archivos no se pudieron copiar (errores de copia) |
| 16 | Error grave (robocopy no pudo continuar, p. ej. ruta no válida, sin acceso o sintaxis incorrecta) |
Por ejemplo, el código 3 significa 1 (se copiaron archivos) + 2 (había archivos adicionales). El 0 significa que no había nada que copiar (todo es idéntico).
Los códigos 0-7 no son fallos; 8 o más indica error. En un archivo por lotes, escribe IF %ERRORLEVEL% LSS 8. Cuando /MIR elimina archivos adicionales, el código incluye el 2, que tampoco es un error.
robocopy frente a xcopy
| Característica | robocopy | xcopy |
|---|---|---|
| Replicación | Sí (/MIR) | No |
| Control de reintentos | Sí (/R, /W) | No |
| Registro | Sí (/LOG, /TEE) | No |
| Modo reiniciable | Sí (/Z) | Sí (/Z) |
| Multihilo | Sí (/MT) | No |
| Copia incremental | Sí (/XO) | Sí (/D) |
| Resistencia en red | Excelente | Básica |
| Códigos de salida | Detallados (0-16) | Básicos (0-5) |
Microsoft ha declarado obsoleto xcopy y recomienda robocopy, así que prefiere robocopy en los archivos por lotes nuevos.
Resumen
Este artículo explicó cómo usar el comando robocopy.
robocopy es una potente herramienta de copia incluida en Windows. En las copias de seguridad en particular, combinar replicación, registro y control de reintentos permite una solución fiable.