Robocopy es una de las utilidades de línea de comandos más utilizadas para copiar grandes volúmenes de datos en Windows. Es una herramienta muy popular debido a su potencia, pero esa potencia conlleva complejidad. En esta guía, desglosaremos toda esa complejidad y proporcionaremos un tutorial completo sobre cómo usar esta herramienta útil.
Robocopy es una utilidad de línea de comandos para Windows que ha estado disponible desde Windows NT. Es un reemplazo para la utilidad xcopy, menos versátil. Le permite especificar una ruta de unidad o de servidor para copiar/mover archivos desde el símbolo del sistema.
La versión de Robocopy hasta la fecha de esta redacción es la 10.0.18. Esta es la versión en la que realicé mis pruebas.
Robocopy ofrece una gran cantidad de características que puede aprovechar para realizar copias y movimientos de archivos eficientes y rápidos. Puede:
- Copiar archivos a través de una red con capacidades de reanudación
- Puede omitir puntos de unión NTFS que causan fallas típicamente por bucles infinitos
- Puede copiar atributos de archivos y directorios conservando marcas de tiempo
- Puede copiar permisos, propietarios e información de auditoría de NTFS
- Puede copiar marcas de tiempo de directorios
- Puede copiar archivos en modo ‘backup’ para asegurar la copia incluso si se han denegado los derechos al administrador
- Reintentos automáticos
- Puede sincronizar dos carpetas
- Es lo suficientemente inteligente como para omitir archivos que ya han sido copiados
- Puede copiar rutas que superan el límite de 256 caracteres
- Realizar copias asíncronas utilizando su capacidad de multihilo.
- Devuelve códigos de salida estandarizados para su uso en scripts.
Como puedes ver, hay mucho que copiar. Quería cubrir todo lo que necesitas saber sobre esta práctica herramienta.
Referencia de Sintaxis Común de Robocopy
¿Por qué una publicación de blog tan larga sobre una sola utilidad? Solo echa un vistazo a las tablas a continuación. ¡Tienes muchas opciones para copiar o mover archivos con robocopy! Encontrarás más opciones en las secciones individuales.
Estas tablas se crearon a partir de la sintaxis de ayuda devuelta por robocopy /?
. Se han dividido en secciones más significativas, se han agregado con el tiempo y se han limpiado para proporcionar información más útil.
Opciones de Origen
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/S | Copy subfolders | |||
/E | Copy subfolders including empty subfolders | |||
/COPY:[DATSOU] | Copy options | /COPY:DAT | D=Data, A=Attributes, T=Timestamps S=Security=NTFS ACLs, O=Owner info, U=aUditing info. File Data (D) always includes file Timestamps (T) | |
/SEC | Copy files with SECurity | /COPY:DATS | ||
/DCOPY:T | Copy directory timestamps | |||
/COPYALL | Copy ALL file info | /COPY:DATSOU | This will prevent dehydrating offline files and will instead copy the file’s tag (on emc VNX/Unity systems at least). This is not officially documented! If dehydration is what you need (reason i found this issue), you can’t copy the ACLs along your files. CREDIT: Monsieurx (Reddit) | |
/NOCOPY | Copy NO file info | useful with /PURGE | ||
/A | Copy only files with the Archive attribute set | |||
/M | like /A, but remove Archive attribute from source files | |||
/LEV:n | Only copy the top n LEVels of the source tree | |||
/MAXAGE:n | MAXimum file AGE – exclude files older than n days/date | |||
/MINAGE:n | MINimum file AGE – exclude files newer than n days/date | If n < 1900 then n = no of days, else n = YYYYMMDD date | ||
/FFT | Assume FAT File Times | 2-second date/time granularity. This replaces NTFS timestamps. Seems to be more reliable when transferring over a network. | ||
/256 | Turn off very long path (> 256 characters) support |
Opciones de Destino
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/A+:[RASHCNET] | Set file attribute(s) on destination files + add | |||
/A-:[RASHCNET] | Remove file attribute(s) on destination files | |||
/FAT | Create destination files using 8.3 FAT file names only | |||
/CREATE | Create directory tree structure + zero-length files only | |||
/DST | Compensate for one-hour DST time differences |
Opciones de Copia
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/L | List files only | Don’t copy, timestamp or delete any files | ||
/MOV | Move files | Delete from source after copying | ||
/MOVE | Move files and directories | Delete from source after copying | ||
/sl | Copy file symbolic links instead of the target | |||
/Z | Copy files in restartable mode | Survive a network glitch | ||
/B | Copy files in backup mode | |||
/J | Copy using unbuffered I/O | Recommended for large files | ||
/NOOFFLOAD | Copy files without using the Windows copy offload mechanism | https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831628(v=ws.11) | ||
/EFSRAW | Copy any encrypted files using EFS RAW mode | |||
/TIMFIX | Fix file times on all files, even skipped files | |||
/XO | Exclude older | if destination file exists and is the same date or newer than the source – don’t bother to overwrite it. | ||
/XC | Exclude changed files | |||
/XN | Exclude newer files | |||
/XX | Exclude files present in destination but not source | /XX | ||
/XF file [file]… | Exclude files matching given names/paths/wildcards | |||
/XD dirs [dirs]… | Exclude directories matching given names/paths. | /XF and /XD can be used in combination e.g. ROBOCOPY c:\source d:\dest /XF *.doc *.xls /XD c:\unwanted /S | ||
/IA:[RASHCNETO] | Include files with any of the given attributes | |||
/XA:[RASHCNETO] | Exclude files with any of the given attributes | |||
/IM | Overwrite modified files. This includes the same files with different times. | |||
/IS | Overwrite files even if they are already the same | |||
/IT | Include tweaked files | |||
/XJ | Exclude junction points from source | /XJ | ||
/XJD | Exclude junction points from source directories | |||
/XJF | Exclude junction points from source files | |||
/MAX:n | Exclude files bigger than n bytes | |||
/MIN:n | Exclude files smaller than n bytes | |||
/MAXLAD:n | Exclude files unused since n | |||
/MINLAD:n | Exclude files used since n | If n < 1900 then n = n days, else n = YYYYMMDD date | ||
/MIR | Mirror a directory tree | /PURGE /E | ||
/PURGE | Delete dest files/folders that no longer exist in source | |||
/XL | Exclude files present in source but not destination | |||
/SECFIX | Robocopy /secfix fixes file security on all files, even skipped files. | Specify the type of security information you want to copy by also using one of these options: /COPYALL /COPY:O /COPY:S /COPY:U /SEC | ||
/ZB | Use restartable mode; if access denied use Backup mode |
Opciones de Monitoreo
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/R:n | Number of retries on failed copies | /R:1000000 | Always try to set this option. I recommend setting this to 10-20 to not waste time retrying. | |
/W:n | Wait time between retries | /W:30 | Always try to set this option to a lower number to retry more quickly. I suggest 5-10. | |
/REG | Save /R:n and /W:n in the Windows registry as default settings | |||
/RH:hhmm-hhmm | times when new copies can be started | |||
/TBD | Wait for sharenames to be defined | retry error 67 | ||
/PF | Check run hours on a per file (not per pass) basis | |||
/MON:n | Run again when more than n changes seen | |||
/MOT:m | Run again in m minutes, if changed |
Entendiendo el Comportamiento de Robocopy
I’ve now completely blew your mind with all of the potential syntax options available to you. Let’s now see all of the different combinations of how we can use this syntax.
I could provide you an enormously long list of robocopy commands with an ever-growing number of switches. But I think it’s better to teach you how to fish. Let’s go over how to put sense out of all of these options.
Robocopy Solo Copia Directorios Completos
Cada ejecución de robocopy tendrá un directorio de origen y un directorio de destino. Robocopy copia y mueve archivos por directorio completo. No es posible explícitamente copiar un solo archivo con robocopy. Utiliza copy
o Copy-Item
de PowerShell para eso.
Sin embargo, puedes copiar un solo archivo con robocopy utilizando el filtrado adecuado que aprenderás a continuación. Para copiar un solo archivo con robocopy, especifica el directorio de origen y destino seguido inmediatamente por el nombre del archivo en el origen.
La sintaxis depende del entorno
Además, las opciones que proporcionas a robocopy dependerán del entorno. Deberás responder algunas preguntas al intentar averiguar qué opciones utilizar.
- ¿Siempre estarás copiando a un directorio vacío?
- ¿Es posible que ya existan archivos en el directorio de destino?
- ¿Vas a copiar terabytes de datos o solo unos pocos megabytes?
- ¿Vas a copiar archivos a través de una red o localmente?
- …y más.
Si no hay archivos en el directorio de destino, no deberías preocuparte por las opciones que sobrescriben archivos. Si no vas a copiar archivos a través de la red, no te preocupes por esas opciones. Define explícitamente las circunstancias actuales y futuras potenciales en las que se encontrará tu entorno.
Reconoce las opciones predeterminadas
Robocopy utiliza muchas opciones de forma predeterminada. Puedes identificarlas observando las tablas anteriores. También proporciona una salida útil cada vez que ejecutas la utilidad.
Puedes ver a continuación que cuando ejecuté robocopy con sus opciones más básicas (la carpeta de origen y destino), automáticamente utilizó algunas opciones. Comprender el comportamiento predeterminado es importante.
Referencia las opciones que ves en la salida con las explicaciones de opciones anteriores y entenderás exactamente qué está haciendo robocopy bajo el capó.

Comprender qué pueden hacer los comandos de Robocopy
Si has utilizado los cmdlets copy
de PowerShell o Copy-Item
, probablemente hayas especificado una fuente y un destino y hayas seguido adelante con tu día. No hay muchas opciones que puedas configurar allí. Estos comandos de robocopy tienen un comportamiento predeterminado.
Pero robocopy, por otro lado, comprende muchas más y te brinda la flexibilidad para ajustar el comportamiento tanto como desees.
Es importante saber que robocopy no solo es consciente del concepto de un archivo o directorio. Hay mucho más en un sistema de archivos que eso y robocopy soporta prácticamente todo.
A file sitting on a filesystem isn’t just a dumb object with a single purpose. There are many different attributes and things that go with the concept of a file. For example, a file has attributes such as:
- a timestamp (written, modified and accessed)
- ACL de NTFS
- un propietario
- información de auditoría de NTFS
- bandera de oculto
- bandera de archivado
Cuando copias o mueves un archivo, tienes la opción de llevar todo eso contigo, si lo deseas.
Comprende que cuando ejecutas robocopy, no estás solo copiando un archivo, también estás potencialmente copiando toda la otra información con él. Es importante darse cuenta de eso y tenerlo en cuenta en las opciones que proporcionas a robocopy.
Lo básico: Realizando Escenarios de WhatIf
Si tienes un servidor de archivos enorme en algún lugar que te gustaría migrar y no quieres tomar ninguna acción todavía, puedes usar robocopy para devolver lo que habría hecho. would
Usando la opción /L
, puedes decirle a robocopy que enumere todos los archivos y/o carpetas que especifiques y devuelva una lista de archivos que habría copiado/movido.
Puedes usar la opción /L
con cualquier otra opción. Esta es una excelente manera de devolver todas las opciones que robocopy habría utilizado (predeterminadas o no). Te dará una vista general de lo que hará robocopy dado las opciones que le proporcionaste.

/L
Lo básico: Copiando Archivos
El uso más básico de robocopy es usando un directorio de origen y destino sin opciones.
Esta opción copiará todos los archivos (excluyendo subcarpetas) desde C:\src hasta C:\dst.
También puedes copiar todo incluyendo subcarpetas (vacías o no) y permisos NTFS. Esto es, por lo que puedo decir, el método para copiar literalmente todo lo que hay en un directorio de archivos a otro directorio.
A continuación, estoy copiando todos los ACL de NTFS, los propietarios de archivos, las subcarpetas (incluyendo las vacías) y todos los atributos de archivo. Todo esto es posible con solo la opción /E
para incluir todas las subcarpetas vacías y /COPYALL
para el resto.
Lo básico: mover archivos
Mover archivos traslada archivos de un directorio a otro, al igual que lo hace la copia. La única diferencia con una operación de movimiento es que los archivos de origen se eliminan después de la copia.
Para eliminar archivos/directorios del origen después de la copia, utiliza la opción /MOV
. Esto eliminará todos los archivos en el directorio especificado (sin subcarpetas).
También puedes usar /MOVE
para mover todos los archivos y subcarpetas.
Lo básico: sincronizar archivos
Robocopy te permite sincronizar dos directorios. Esto significa asegurarse de que todos los archivos en el directorio de destino estén en el directorio de origen y no más. /MIR
replicará los datos, copiando todos los archivos del origen que no estén en el destino y eliminará los archivos en el destino que no estén en el origen. ¡Ten cuidado!
Copiar archivos a través de una red
Si estás copiando archivos a través de una red, hay algunas opciones que debes tener en cuenta.
Robocopy te permite copiar archivos en modo ‘reiniciable’ usando la opción /Z
. Esto significa que si un archivo comienza a copiarse y falla a la mitad, la copia puede comenzar de nuevo en lugar de fallar por completo. La opción /Z
es útil cuando la transmisión se corta a través de una red.
Advertencia: Algunos han informado que el uso de
/Z
reduce el rendimiento en 1/4. Avísame tus hallazgos.
También puedes usar la opción /FFT
. Este interruptor se sabe que conserva más precisamente las marcas de tiempo de los archivos al transferir sobre una red. Esta opción utiliza las marcas de tiempo del sistema de archivos FAT en lugar de NTFS.
Usando /IPG
para Controlar el Espacio entre Paquetes
Cuando copias archivos a través de una red, puedes usar el interruptor /IPG
. También se conoce como la opción de espacio entre paquetes. Esta opción define (en milisegundos) la frecuencia con la que robocopy esperará entre el envío de nuevos paquetes.
Siempre usa Rutas UNC en lugar de Letras de Unidad
A reader on Reddit discovered the hard way to not use mapped drives as a destination directory. Instead, always use always use a UNC path. You might run into issues with the 256-character limit if you do. Check out this Microsoft doc for more information.
Modo de Copia de Seguridad de Robocopy (Robocopy /Z
)
Robocopy tiene una opción (/B
) o como una copia de seguridad al modo reiniciable (/ZB
) que copia archivos en modo de copia de seguridad. ¿Qué es el “modo de copia de seguridad” de todos modos?
Cuando copias normalmente un archivo en Windows y te encuentras con un archivo que requiere privilegios administrativos para acceder, recibirás un error que indica que no tienes permiso. Aunque estés ejecutando como administrador local, Windows no te permitirá acceder.
ADVERTENCIA: Ha habido informes de volúmenes de servidor corruptos al copiar datos a un servidor Windows Server 2016 con deduplicación activada. Cuando utiliza el interruptor
/ZB
, el resultado será que la tienda de fragmentos de deduplicación se dañará en la carpeta System Volume Information. Los archivos copiados no serán legibles y generarán errores al intentar manipularlos. Enlace de Serverfault con más información.
El modo de copia de seguridad es una forma de acceder a archivos sin preocuparse por los permisos.
Robocopy utiliza el modo de copia de seguridad para utilizar el privilegio SeBackupPrivilege para leer archivos y el derecho de usuario SeRestorePrivilege para acceder a los archivos que necesite. Esto ignora cualquier ACE que normalmente le impediría acceder a esos archivos.
Los derechos de usuario SeBackupPrivilege y SeRestorePrivilege normalmente se asignan a usuarios en los grupos Operadores de copia de seguridad y Administradores, pero a veces pueden ser eliminados. El módulo de copia de seguridad elimina ese riesgo y otorga temporalmente al usuario que ejecuta robocopy esos derechos.
Si desea verificar si su cuenta de usuario tiene ese derecho, puede ejecutar whoami /priv
y ambos derechos deberían mostrarse.
Filtrado de archivos y carpetas
La gran mayoría de las opciones disponibles para usted son para excluir archivos y directorios de muchas maneras diferentes. He desglosado todas las formas en que puede filtrar o excluir archivos y directorios según varios criterios.
Por nombre de archivo o extensión de archivo
La filtración de qué archivos se copian/mueven en una llamada de robocopy se hace utilizando comodines. Puedes usar un comodín para filtrar archivos que coincidan con un nombre de archivo específico o una extensión.
Por ejemplo, para copiar solo archivos TXT, puedes especificar *.txt.
Si quieres limitar solo a archivos que empiecen con a, podrías usar a*.
También puedes proporcionar múltiples conjuntos de coincidencias de nombres de archivo separándolos con un espacio como se muestra a continuación.
Cuando filtras por nombre de archivo, robocopy te mostrará el filtro en la salida.

Por nombre de directorio
Robocopy te permite filtrar elementos no solo por archivo sino también por nombre de directorio. Utilizando robocopy /xd
, puedes excluir ciertos directorios que coincidan con un nombre específico.
Cuando copies varias carpetas, usa el interruptor /XD
para excluir carpetas de la ejecución.
Por fecha y hora de archivo/directorio
A continuación encontrarás todas las opciones de robocopy que excluirán archivos y carpetas basándose en varios atributos de fecha y hora.
Switch | Explanation |
/DCOPY:T | Copy directory timestamps |
/MAXAGE:n | Exclude files older than n days/date |
/MINAGE:n | Exclude files newer than n days/date |
/XO | If destination file exists and is the same date or newer than the source, don’t overwrite |
/XN | If destination file exists and is the same date or older than the source, don’t overwrite |
Existen dos opciones populares para elegir al filtrar en cosas como la fecha y hora; /XO
y /MAXAGE
.
/XO
te permite excluir archivos de la copia solo si son más nuevos que la fuente. Usando la opción /XO
, puedes robocopy solo los archivos nuevos por fecha de acceso.
Si conoces la edad máxima que pueden tener los archivos, también puedes usar la opción /MAXAGE
. Esto te permite especificar en formato YYYMMDD la fecha más antigua que puede tener un archivo antes de ser copiado.
Trabajos de Robocopy
Has visto que tienes docenas de opciones disponibles. Es fácil que estas opciones pronto se vuelvan difíciles de manejar. Afortunadamente, tienes una mejor opción que memorizar y asegurarte de que todas estas opciones estén correctas cada vez.
Los archivos de trabajo de Robocopy son archivos de texto que contienen una opción por línea. Normalmente usarás robocopy para crear estos archivos de trabajo. Una vez creados, puedes usar robocopy para modificarlos o un simple editor de texto.
Tienes varias comandos de robocopy que funcionan con trabajos.
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/JOB:jobname | Take parameters from the named job file | |||
/SAVE:jobname | Save parameters to the named job file | |||
/QUIT | Quit after processing command line | Useful for viewing parameters | ||
/NOSD | No source directory is specified | |||
/NODD | No destination directory is specified | |||
/IF | Include the following files |
A typical job file created with robocopy has an RCJ extension and looks like the below snippet. This job file was created by running robocopy C:\src D:\dst /save:myjob
. You can see that you can provide comments in the job file using ::
which is most of what this file has.
Sin comentarios, el archivo solo contendría una opción por línea.
Guardando Archivos de Trabajo
Guardar un archivo de trabajo es tan simple como agregar la opción /SAVE:<nombre_del_trabajo>
al final de tu sintaxis. Reemplaza <nombre_del_trabajo>
con el nombre del trabajo. La opción /SAVE
creará un archivo llamado <nombre_del_trabajo>.rcj en el directorio donde ejecutaste robocopy.
Debes obligatoriamente especificar /SAVE
como la última opción. Cualquier opción especificada después de /SAVE
no se agregará al archivo de trabajo. Además, ten en cuenta que incluso si ya existe un archivo de trabajo existente, robocopy siempre sobrescribirá el existente. ¡Realiza copias de seguridad o control de versiones de tus archivos de trabajo!
Nota: Si intentas usar la opción
/MT
al guardar en un archivo de trabajo, no se incluirá en el archivo de trabajo. Avísame si logras que se incluya.
Usando Archivos de Trabajo
Una vez que un trabajo se guarda en un archivo de trabajo, puedes luego usar la opción /JOB:<nombre_del_trabajo>
para especificar el archivo de trabajo del cual leer. Robocopy lee todos los parámetros dentro del archivo de trabajo. Luego se ejecuta como si hubieras proporcionado las opciones directamente en la línea de comandos.
Creando un Archivo de Trabajo Sin Ejecutar un Trabajo Usando /QUIT
El propósito de la opción /QUIT
no es obvio. A simple vista, podrías pensar que /QUIT
fuerza a que un trabajo en ejecución se detenga. En cambio, /QUIT
actúa más como una opción para evitar que un trabajo se ejecute en primer lugar.
Oficialmente, la opción /QUIT
“obliga a robocopy a terminar el procesamiento de la línea de comandos”. Sin embargo, sería mejor explicado como la creación de un archivo de trabajo sin ejecutar un trabajo.
Si usas la opción /SAVE
, también ejecutará el trabajo automáticamente. No hay forma de crear un archivo de trabajo sin ejecutar primero el trabajo. Podrías crear el archivo de trabajo RCJ con un editor de texto o podrías hacerlo usando robocopy agregando /QUIT
al final.
Editando un Archivo de Trabajo
Dado que los archivos de trabajo son simplemente archivos de texto, podrías editarlos con tu editor de texto favorito o podrías hacer que robocopy lo haga por ti.
Puedes editar archivos de trabajo usando una combinación de /JOB
, /SAVE
y /QUIT
.
Por ejemplo, quizás quieras excluir todos los archivos EXE de tu trabajo robocopy guardado en un archivo de trabajo llamado backupfiles.rcj. Ya has creado el archivo de trabajo y no quieres sobrescribirlo por completo. Puedes agregar la nueva opción como se muestra a continuación:
Usando múltiples archivos de trabajo
Incluso puedes combinar el uso de archivos de trabajo también. Cuando se especifican varios archivos de trabajo en la misma ejecución, todas las opciones utilizadas en esa ejecución se combinarán.
Por ejemplo, tal vez tengas una gran lista de archivos para excluir de tu trabajo de copia de backupfiles. Abre un editor de texto y agrega lo siguiente para crear un archivo exclude.rcj.
Luego puedes excluir estos archivos del trabajo de backupfiles así:
Dado que el archivo de trabajo original de backupfiles ya estaba excluyendo todos los archivos EXE, la sintaxis de la ejecución anterior sería /XF *.exe a.exe b.txt c.cer
. Robocopy combina todas las opciones en una sola.
Plantillas de Robocopy y Uso de las Opciones /NOSD
y /NODD
Si estás trabajando con muchos archivos de trabajo, puedes construir archivos de trabajo para aceptar parámetros. Robocopy te permite pasar valores desde la línea de comandos a los trabajos cuando se ejecutan. Un parámetro no es un término de robocopy pero encaja bien en este escenario.
Puedes construir trabajos de robocopy para aceptar parámetros no especificando un directorio de origen o destino explícitamente usando las opciones /NOSD
y /NODD
o simplemente no incluyendo un directorio de origen y destino en absoluto.
Por ejemplo, crea un archivo de trabajo sin origen o destino usando la sintaxis a continuación. La intención de este trabajo es copiar todos los archivos TXT y EXE desde un origen a un directorio de destino.
Por sí solo, este trabajo nunca funcionará porque no se ha especificado un directorio de origen o destino.
Cuando creas un trabajo sin directorio de origen y destino, el archivo de trabajo se crea automáticamente utilizando las opciones /NOSD
y /NODD
.
La opción /NOSD
le indica a robocopy que no incluiste un directorio de origen mientras que /NODD
indica que no incluiste un directorio de destino. Este archivo de trabajo es una “plantilla” para otros trabajos.
Pero puedes pasar “parámetros” a este archivo de trabajo para proporcionar los directorios de origen y destino.
Para usar el archivo de trabajo recién creado para copiar archivos de C:\src a C:\dst, puedes pasar estos directorios directamente en la línea de comandos que luego se pasarán al trabajo.
Copia Asincrónica (Robocopy /MT
)
Por defecto, robocopy procesa solo un archivo a la vez. Sin embargo, puedes forzar a robocopy a copiar más archivos que a la vez usando la opción /MT
.
La opción /MT
te permite especificar el número de hilos que robocopy usará para copiar archivos. El máximo es 128.
Puedes usar /MT
de la siguiente manera:
I’ve chosen 32 in this case as a baseline. I suggest starting at 32 to see how your computer and network handle things and adjust the threads accordingly.
Ten en cuenta que si usas
/MT
, no podrás usar/IPG
o/EFSRAW
. Para un mejor rendimiento, no saques el registro a la consola. En su lugar, usa/LOG
.
Programación de Robocopy
Robocopy tiene algunas formas en las que puedes programar cuándo se ejecuta.
Usando /RH
Usando la opción /RH
, puedes indicarle a robocopy que solo se ejecute durante un tiempo específico. Esto es excelente si tienes una ventana de mantenimiento o un momento en el que todos se han ido a casa por el día.
Puedes especificar una hora de inicio y una hora de finalización en el formato HHMM-HHMM. Por ejemplo, para invocar robocopy pero solo permitir que se ejecute entre las 5 PM y las 9 AM según lo definido por el reloj del sistema, ejecuta:
Notarás que si invocas robocopy fuera de esas horas, te mostrará la hora actual y esperará hasta la hora de inicio para ejecutarse.

Debes asegurarte de que ambas horas estén en formato de 24 horas y tengan exactamente cuatro dígitos. La ventana debe ser mayor a dos minutos.
Por defecto, al usar /RH
, se verificará la hora de inicio antes de la ejecución completa. Sin embargo, si tienes muchos archivos y crees que el proceso puede durar más tiempo, puedes usar la opción /PF
. /PF
obligará a robocopy a verificar la ventana antes de cada archivo.
Usando el Programador de Tareas
El Registro de Salida
Robocopy siempre generará un registro de salida. Ya sea que ese registro se muestre a través de stdout en la consola y/o se redirija a un archivo de registro, depende de ti.
Tienes muchas opciones al mostrar la salida de robocopy.
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/NP | No progress. Suppresses the display of progress information. This can be useful when output is redirected to a file. | |||
/unicode | Display the status output as unicode text | |||
/LOG:file | Output status to log file and overwrite | |||
/UNILOG:file | Output status to unicode log file and overwrite | |||
/LOG+:file | Output status to log file and append to existing log file | |||
/UNILOG+:file | Output status to unicode log file and append to existing log file | |||
/TS | Displays the file timestamps for every file processed. | |||
/FP | Replaces simple file names with full file pathnames in the output. | |||
/NS | Does not show file sizes. | |||
/NC | Hides output the file class “Text Tags” (Go here for more information: https://www.uvm.edu/~gcd/2015/04/robocopy-file-classes/) | |||
/NFL | Hides file names. Failures are still logged though. Any files files deleted or would be deleted if /L was omitted are always logged | |||
/NDL | Hides output of the directory listing. Full file pathnames are output to more easily track down problematic files. | |||
/TEE | Output to console window, as well as the log file | |||
/NJH | No job header | |||
/NJS | No job summary | |||
/BYTES | Print sizes as bytes | |||
/X | Report all files, not just those selected & copied | |||
/V | Produce verbose output log, showing skipped files | |||
/ETA | Show estimated time of arrival of copied files. See the start time of each file copy and the estimated time of completion based on the observed throughput of previous copies. Times are displayed after the file name in the format HH:MM – > HH:MM (start – > finish). | |||
/DEBUG | Show debug volume information |
Limitando los Elementos del Registro con /NJS
y /NJH
Por defecto, robocopy devuelve dos elementos en su salida, un encabezado de trabajo y un resumen de trabajo.
El encabezado del trabajo es el simple ROBOCOPY en la parte superior.

El resumen del trabajo muestra un estado resumido de todos los archivos/carpetas, cuántos datos se transfirieron y la hora en que se completó la ejecución.

Puedes ocultar cada uno de estos elementos usando la opción /NJH
para ocultar el encabezado del trabajo y la opción /NJS
para ocultar el resumen del trabajo. Puedes incluir cualquiera de estas opciones o ambas juntas.

Redirigiendo el Registro de Salida a un Archivo
Si necesitas guardar el registro de salida, puedes redirigirlo a un archivo de texto y/o mostrarlo en la consola. Puedes hacerlo utilizando redireccionadores de salida tradicionales como >
, >>
, PowerShell o la opción /LOG
.
Para redirigir el registro de salida a un archivo usando la opción /LOG
sobrescribiendo cualquier archivo de registro existente, usa la sintaxis /LOG:<ruta_del_archivo>
como se muestra a continuación. La única salida que recibirás en la consola es la ruta al archivo de registro.
Si deseas conservar el contenido de cualquier archivo de registro existente y agregar resultados a un archivo, puedes usar el operador +
como se muestra a continuación.
Redirigiendo el Registro de Salida a un Archivo y Mostrándolo en la Consola
Si deseas guardar el registro de salida en un archivo pero también verlo en la consola, puedes usar la opción /TEE
. Esta opción hace que robocopy escriba la salida en el archivo de registro manteniendo el comportamiento predeterminado de devolver la salida a la consola.
Códigos de Salida
Al igual que otras utilidades de línea de comandos, robocopy devuelve códigos de salida según los resultados de la ejecución. Todos deseamos que robocopy siempre salga con éxito con un 0
, pero eso no siempre sucede.
A continuación, encontrarás todos los códigos de salida que devuelve robocopy y su explicación. Cualquier código de salida mayor a siete indica al menos un fallo durante la ejecución.
Exit Code | Explanation |
0 | No action performed. Source and destination are synchronized. |
1 | At least one file was copied successfully. |
2 | Extra files or directories were detected. Examine log. |
3 | Exit codes 2 and 1 combined. |
4 | Mismatched files or directories found. Examine log. |
5 | Exit codes 4 and 1 combined. |
6 | Exit codes 4 and 2 combined. |
7 | Exit codes 4, 1 and 2 combined. |
8 | At least one file or directory could not be copied. Retry limit exceeeded. Examine log. |
16 | Copy failed catastrophically. |
Ten en cuenta que si estás ejecutando robocopy en una utilidad de terceros, esa utilidad podría considerar cualquier código de salida no nulo como un fallo. Para evitar esto, puedes cambiar el código de salida a 0 si devuelve 1.
El código de salida “extra” de robocopy es un código de retorno común que significa que hay un archivo “extra” en la carpeta de destino pero no en la carpeta de origen. Este código excluye extras que impedirán cualquier eliminación desde el destino.
Cambiar el código de salida en un archivo por lotes
Si estás ejecutando robocopy con un archivo por lotes, puedes encontrar el valor de la variable %ERRORLEVEL%
. Si devuelve 1, utiliza la palabra clave exit
para salir del script con 0.
Cambiar el código de salida en un script de PowerShell
Si estás ejecutando robocopy en un script de PowerShell, puedes invocar robocopy con Start-Process
usando PassThru
para devolver el proceso creado y Wait
para esperar a que robocopy termine. Luego puedes verificar la propiedad ExitCode
para un valor de 1. Si el código de salida es 1, sale del script de PowerShell con un 0 usando $host.SetShouldExit()
.
Errores Comunes
Si estás lidiando con miles de archivos, es probable que te encuentres con algunos problemas. Aquí tienes un desglose de errores comunes que he encontrado
Error de parámetro no válido
Cuando veas un error que indica error de parámetro inválido, normalmente significa que has intentado pasar opciones a robocopy de alguna manera fuera de secuencia. El error parámetro inválido de robocopy 3 es el más común, parece.
A common reason you’d receive this error is when you specify a source or destination directory with spaces and forget to surround it with quotes.
Ejemplos de Robocopy
Puedes construir tus propias cadenas de robocopy o puedes tomar lo que otros han aprendido ¡y usarlas! En esta sección, cubriré casos de uso sobre cómo utilizar robocopy para lograr diversas cosas.
Encontrar el tamaño del directorio de una carpeta de red
Contribuidor: northendtroooper (Reddit)
Eliminar rápidamente el contenido de una carpeta (ignorando permisos en subcarpetas)
Contribuidor: pizzasteveo (Reddit)
Realizar migraciones de archivos grandes
Contribuidor: @MySnozzberries (Twitter)
El objetivo de este fragmento es forzar la propiedad de todos los archivos de vuelta a Administradores. Luego agregamos un ACE explícito para el grupo Administradores para tener control total sobre cada objeto de forma recursiva aunque también estamos estableciendo herencia.
Finalmente, realizamos una copia completa de robocopy con DACLs al destino con registro. El registro luego puede ser revisado por problemas de permisos adicionales o simplemente bloqueos de archivos y otra sincronización delta puede realizarse más tarde.
Recursivamente fuerza al grupo de Administradores como propietario de todos los archivos y directorios. Puede haber formas de evitar esto, pero este es el enfoque más contundente y generalmente el más rápido.
Una vez que seamos el propietario, ahora podemos forzar un nuevo ACE en el DACL para cada objeto. Esto otorga a los Administradores control total con herencia habilitada y de forma recursiva a través de la ruta.
Establecer esto en la raíz con herencia cubriría el entorno, pero cuando un recurso compartido tiene CREATOR OWNER con Control total (que lamentablemente incluso es la recomendación de Microsoft para cosas como los almacenes de perfiles de usuario de archivos), el usuario puede desactivar la herencia o eliminar ACE según su criterio. Entonces, una mano dura suele ser la solución más rápida.
Una vez que hemos cambiado los DACL en la mayoría de los archivos, intentamos copiar los archivos a una nueva ubicación, común para cosas como migraciones de recursos compartidos de archivos. Para esto, copiamos los elementos de forma recursiva y utilizando el interruptor /SEC
para también copiar los Datos/Atributos/Timestamps/DACLs.
Luego registramos la operación con rutas completas y para todos los objetos (interruptor /V
verboso) en un registro, para que podamos remediar los <5% de errores que son comúnmente relacionados con la longitud de la ruta o bloqueo de archivos y obtener más granularidad.
Este es un marco simple para gestionar una migración de recursos compartidos de archivos con un impacto mínimo en la experiencia del usuario. También mejora el control que TI tiene sobre los datos. Si un cliente tiene una sólida práctica de gobernanza de datos donde la propiedad se gestiona adecuadamente a nivel de carpeta secundaria, esto se convierte en una discusión más complicada, pero la mayoría de los clientes que encontramos tienen la suerte de estar utilizando solo herencia y ACE basados en grupos, por lo que esta es la situación y solución más común con la que comenzamos.
Alternativas a Robocopy
Robocopy es una herramienta impresionante, pero hay muchas otras herramientas similares que pueden resultar de interés.
- xxcopy – Una utilidad de línea de comandos similar con toneladas de opciones.
- Cmdlet Copy-Item de PowerShell – No tan completa, pero mucho más sencilla.
- TreeSize – Utilidad con interfaz gráfica y capacidades de secuenciación para obtener información sobre carpetas.
Resumen
Robocopy es una excelente herramienta para copiar conjuntos grandes de archivos. Ya sea para una migración de datos, mantener carpetas sincronizadas o simplemente necesitas una forma rápida y precisa de copiar archivos, robocopy es una excelente elección.