# Robocopy

Robocopy, o "Robust File Copy" (Copia de Ficheros Consistente), es un comando de replicación de directorios, disponible desde la Línea de Comandos. Creado por Kevin Allen, formaba parte del Kit de Recursos de Windows, y se presentó como una característica estándar de Windows Vista y Windows Server 2008.

## Características

Robocopy destaca por superar en funcionalidades a los comandos incluidos en Windows (COPY y XCOPY) y además:
* Puede tolerar cortes de red y continuar la copia por donde la había dejado (los ficheros incompletos se marcan con la fecha 01/01/1980 y contienen un registro de recuperación para que Robocopy sepa por dónde continuar).
* Puede copiar correctamente atributos, información del propietario, flujos alternos de datos (ADS), información de auditoría y fechas por defecto, sin la necesidad de utilizar los engorrosos parámetros de los comandos.
* Puede copiar la ACL de NTFS, (si se añade el parámetro /COPYALL /SEC), y hacer valer el "derecho de copia de seguridad" de Windows NT (/B) para que un administrador pueda copiar un directorio completo, incluyendo aquellos ficheros cuya lectura está denegada al administrador.
* Persistencia por omisión, con un número programable de reintentos automáticos si no se puede acceder a un archivo.
* Dispone de un modo "espejo", que mantiene la arborescencia sincronizada borrando archivos del destino, opcionalmente, si ya no están en el origen.
* Puede copiar grandes cantidades de ficheros que harían que con la utilidad XCOPY no se consiguiera.
* Tiene un indicador de progreso que la línea de comandos que se actualiza continuamente.
* Puede copiar archivos y carpetas con nombres largos que superen los 256 caracteres —hasta un máximo teórico de 32 000— sin errores.
* Soporta copiado multihilo (característica introducida con Windows 7 y Windows Server 2008).
* Códigos de retorno.
En particular, Robocopy no puede copiar archivos abiertos en uso por otros usuarios o aplicaciones. El presunto "modo respaldo" es un privilegio administrativo que permite a Robocopy invalidar configuraciones de permisos (en concreto, los de la ACL de NTFS) para la misión de realizar copias de seguridad. El subsistema de Windows Volume Shadow Copy es el único que puede copiar archivos abiertos mientras están en uso. Robocopy no implementa el acceso a este servicio, reduciendo su utilidad como utilidad de copia de seguridad de volúmenes en uso. Sin embargo, se pueden utilizar las utilidades VSHADOW o DISKSHADOW (incluidas en Windows Server 2008) para crear instantáneas de un volumen que se podrá respaldar usando Robocopy.
Por otra parte, por su diseño, la versión original de Robocopy no es capaz de replicar atributos de seguridad de archivos cuyos permisos hayan cambiado después de la replicación inicial. Este comportamiento se corrigió en las versiones de Robocopy para Windows 2008 y Vista. Esto conlleva que Robocopy no se comporte igual entre distintas plataformas.

### La interfaz

Aunque Robocopy en sí es una herramienta de la línea de comandos, Microsoft Technet también ha suministrado una interfaz, que requiere .net Framework 2.0. Ha sido desarrollada por Derk Benisch, ingeniero de sistemas junto a grupo MSN de Microsoft. Esta interfaz incluye la versión XP026 de Robocopy (para Vista).

## Ejemplos de uso

Copiar el contenido de un directorio recursivamente, de c:\foo a c:\bar
Copiar el contenido de un directorio recursivamente (/E), y copiar toda la información de los ficheros (/COPYALL, que equivale a /COPY:DATSOU, D=Datos, A=Atributos, T=Fecha, S=Seguridad=ACL de NTFS, O=Información del propietario, U=Información de auditoría), sin reintentos sobre archivos bloqueados (/R:0). Nótese que las fechas de los directorios no se restablecerán si se usa una versión más antigua que la XP026:
Duplicar foo a bar, borrando cualquier fichero en bar que no esté en foo (/MIR), copiar archivos en modo reiniciable (/Z) en caso de que se pierda la conexión de red

## Copia carpetas, no archivos

La sintaxis de Robocopy es claramente distinta de la que usan los comandos de copia normales, por el hecho de que solo acepta nombres de carpetas, no archivos, tanto en el origen como en el destino. No se aceptan ni como origen ni como destino nombres de ficheros y comodines (como "*.*"). Los ficheros se pueden seleccionar o excluir usando argumentos de filtrado, que solo podrán referirse a nombres de fichero relativos a las carpetas ya seleccionadas, pues no se aceptan rutas completas.
Por ejemplo, para copiar el archivo foo.txt del directorio c:\bar a c:\baz, se usaría la siguiente expresión

## Lista parcial de parámetros de línea de comandos

La lista a continuación refleja las opciones de línea de comandos más comunes para Robocopy

### Opciones comunes
#### /MIR

    Activa el modo espejo, borrando cualquier fichero en destino que ya no esté en origen (equivale a /E y /PURGE).

#### /Z

    Copia archivos en modo reiniciable. "Reiniciable" hace mención a que Robocopy escribirá un registro de recuperación en el fichero incompleto en caso de que la operación se vea interrumpida o abortada, para que una futura ejecución de Robocopy pueda continuar por donde ésta lo dejó, en lugar de comenzar otra vez desde el principio. Esto es útil para copias fiables de ficheros grandes o cantidades sobre redes inestables tales como [Red privada virtual|VPN] o Internet. Un fichero incompleto tiene el mismo tamaño que el fichero completo, y se le anota una fecha en un período de 24 horas a partir del 01/01/1980 a las 0:00.

#### /COPYALL

    Comprueba que se ha copiado la seguridad NTFS. Equivale a /COPY:DATSOU, donde D=Datos, A=Atributos, T=Fecha, S=Seguridad=ACL de NTFS, O=Información del propietario, U=Información de auditoría.

#### /B

    Abre el fichero en modo backup (copia de seguridad). Permite abrir los ficheros sin restricciones de seguridad, pero requiere derechos adicionales en origen y destino.

#### /ZB

    Usar modo reiniciable; si se deniega el acceso, usar modo backup.

### Opciones especializadas
#### /S

    Copia subdirectorios si no están vacíos (como XCOPY).

#### /E

    Copia subdirectorios, aunque estén vacíos (como XCOPY).

#### /M

    Copia ficheros con el atributo Archivo (como XCOPY con la opción /M).

#### /MOV

    Mueve los archivos, borrándolos del origen.

#### /MOVE

    Borra ficheros Y carpetas (los borra del origen tras la copia).

#### /MON:n

    Monitoriza y lanza la copia tras n cambios (y MOT minutos).

#### /MOT:n

    Configura el intervalo mínimo de monitorización (n minutos) antes de lanzar otra copia.

#### /XA:atributos

    Excluye ficheros con cualquier de los attributes dados. Ejemplo: /XA:H no copiará archivos con el atributo de oculto.

#### /XF nombre

    Excluye ficheros indicados en nombre. Se aceptan comodines. Ejemplo: /XF *.bak no copiará ningún archivo con la extensión *.bak.

#### /XD nombre

    Excluye directorios indicados en nombre en alguna parte de la ruta. Funciona con comodines (p. ej.: /XD BKUP* no copiará directorios que empiecen por "BKUP", sin importar en qué parte del árbol se encuentren).

#### /XC

    Excluye ficheros con cambios.

#### /XN

    Excluye ficheros nuevos.

#### /XO

    Excluye ficheros más antiguos.

#### /XX

    Excluye ficheros y directorios extra, que puede estar en destino, pero no en origen.

#### /XL

    Excluye ficheros y directorios solitarios; Puede estar en origen, pero no en destino.

#### /IF

    Incluir los siguientes archivos.

#### /IS

    Incluye los mismos archivos.

#### /IT

    Incluye ficheros retocados (p. ej.: si unos tienen atributos de archivos y otros de solo lectura).

#### /XJ

    Excluir enlaces simbólicos. Cuando se copian cuentas de usuario a otra ubicación en Windows Vista, es importante excluir los enlaces simbólicos. El enlace en '\Usuarios\...\AppData\local' denominada 'Application Data' apunta a su enlace superior, creando un bucle que puede hacer caer a Robocopy. Y aún más, si un enlace apunta a un disco origen que se copia a otro disco destino usando /MIR (o /E y /PURGE) y se copia el enlace, éste apuntará al disco origen, que puede resultar en la modificación de los contenidos del disco origen.

#### /R:n

    Le indica a Robocopy los 'n' reintentos antes de terminar con error (1 millón por omisión).

#### /IPG:n

    Le indica a Robocopy la pausa en 'n' milisegundos entre paquetes en transferencia en redes. Útil para preservar ancho de banda en conexiones lentas.

#### /L

    SimuLa la realización de la copia sin hacerla, para probar el resultado de una configuración desde la línea de comandos.

#### /W:n

    Tiempo de espera entre reintentos (30 seconds por omisión).

#### /PURGE

    Borra los archivos que no estén en origen.

#### /DST

    Compensación por diferencias horarias.

#### /DCOPY:T

    COPia Fechas de Directorios. ### Disponible en XP026 (WinXP) & XP027 y posterior (Vista).

#### /MAXAGE:n

    Vida MÁXima de los ficheros - excluye ficheros más antiguos que n días/fecha.

#### /MINAGE:n

    Vida MÍNima de los ficheros - excluye ficheros con menos de n días/fecha.

#### /MT:n

    Copia multihilos (multithreaded) (solo Windows 7 ). El valor de n alcanza de 1 a 128 (8 por omisión)

#### /FFT

    Assume FAT File Times (2-second date/time granularity).

### Opciones de registro
#### /NFL

    No registrar nombres de ficheros.

#### /NDL

    No registrar nombres de directorios.

#### /NS

    No registrar tamaños de ficheros.

#### /NC

    No registrar clases de ficheros.

#### /X

    Indicar todos los archivos extra.

#### /V

    Sacar información minuciosa, con los archivos excluidos.

#### /TS

    Incluir las fechas de los archivos de origen.

#### /FP

    Incluir trayectorias completas.

#### /NP

    No mostrar % copiado.

#### /ETA

    Mostrar hora estimada de llegada.

#### /LOG:fichero.txt

    Reemplazar fichero.txt con el estado de la tarea.

#### /LOG+:fichero.txt

    Añadir el estado de la tarea a fichero.txt.

#### /TEE

    Salida a la ventana de consola, así como el archivo de registro.

#### /NJH

    Sin cabecera de la tarea.

#### /NJS

    Sin resumen de tareas.
(Ver lista completa en aquí)

## Problemas conocidos

Hasta XP026
* La versión XP026 no devuelve los códigos ERRORLEVEL cuando existen directorios/ficheros extra.
* La nueva opción en Vista (XP027) /EFSRAW : Copiar archivos cifrados en modo EFS RAW; no está disponible para XP (XP026).
* Robocopy no copiará las fechas de las carpetas de origen. En su lugar, usará la fecha actual al crear las nuevas. Si se desea que ambas copias sean iguales, se tiene que usar otra solución de copia de seguridad. Se ha tratado en la versión XP026 y la versión de Vista (parámetro /DCOPY:T)
* No copia de manera fiable nombres cortos de ficheros.
* La copia de ficheros en modo reiniciable es mucho más lenta (alrededor de 6 veces más en red) que en modo normal o de respaldo por la necesaria sobrecarga de administración.
* Aunque la versión XP026 ya puede copiar archivos comprimidos ocurre una gran fragmentación.
* El modo Backup no puede invalidar la denegación explícita de permisos ACL de NTFS si el que copia no es un objeto del propietario. (Mensaje de error: ERROR 5 (0x00000005) Copiando seguridad NTFS al directorio de destino. Acceso denegado.) Se puede superar este error con solo copiar los datos con esta configuración de opciones /COPY:DTen lugar de la opción /COPYALL
* Robocopy no preserva los enlaces duros.
* Robocopy no puede copiar a través de enlaces FTP.

## Códigos de retorno ErrorLevel

El código de retorno de Robocopy es un mapa de bits, como se puede observar en:
* 0×16 Error grave. Robocopy no copió ningún fichero. Se debe a un error de utilización o derechos de acceso insuficientes en origen o destino.
* 0×08 Algunos archivos o carpetas no se han copiado (Hubo errores de lectura y se rebasó el límite de reintentos). Comprobar estos errores más adelante.
* 0×04 Se han detectado algunas discrepancias en los nombres de archivos y ficheros. Examinar el registro de salida. Probablemente hará falta administración.
* 0×02 Se han detectado archivos / directorios extra. Examinar el registro de salida. Hará falta administración.
* 0×01 Se han copiado uno o más ficheros con éxito (o sea, han llegado nuevos ficheros).
* 0×00 Ningún error, no se ha copiado nada. Origen y destino están completamente sincronizados.
Se puede usar estos códigos para su utilización en fichero por lotes, de la siguiente manera:
De forma alternativa, también se pueden usar para dar información más detallada:

## Versiones

Nota: Varias versiones de Robocopy no muestran el número de versión al ejecutar 'Robocopy /?' en la línea de comandos.
| Versión del producto | Versión del archivo | Año | Origen | Otro |
| 1.70 | - | 1997 | Windows NT Resource Kit | |
| 1.71 | 4.0.1.71 | 1997 | Windows NT Resource Kit | |
| 1.95 | 4.0.1.95 | 1999 | Windows 2000 Resource Kit | |
| 1.96 | 4.0.1.96 | 1999 | Windows 2000 Resource Kit | © 1995-1997 |
| XP010 | 5.1.1.1010 | 2003 | Windows 2003 Resource Kit | |
| XP026 | 5.1.2600.26 | 2005 | Downloaded with Robocopy GUI v.3.1.2 | |
| XP027 | 5.1.10.1027 | 2008 | Bundled with Windows Vista, Server 2008, Windows 7 | © 1995-2004 |
| 6.1 | 6.1.7601 | 2009 | KB2639043 | © 2009 |
| 6.2 | 6.2.9200 | 2012 | Bundled with Windows 8 | © 2012 |
| 6.3 | 6.3.9600 | 2013 | Bundled with Windows 8.1 | © 2013 |
| 10.0 | 10.0.10240 | 2015 | Bundled with Windows 10 | © 2015 |