Adam the Automator

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 por lo poderosa que es. Pero con todo ese poder viene la complejidad. En esta guía, desglosaremos toda esa complejidad y proporcionaremos un tutorial completo sobre el uso de esta útil herramienta.

Robocopy es una utilidad de línea de comandos de Windows que ha estado disponible desde Windows NT. Es un reemplazo para la utilidad xcopy menos versátil. Le permite especificar una ruta de acceso de unidad o de servidor para copiar/mover archivos en un símbolo del sistema.

La versión de Robocopy en este momento es hasta 10.0.18. Esta es la versión en la que realicé mis pruebas.

Robocopy proporciona una serie de funciones 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 cv
  • Puede omitir puntos de unión NTFS que causan fallas típicamente desde bucles infinitos
  • Puede copiar atributos de archivos y directorios conservando marcas de tiempo
  • Puede copiar permisos NTFS, propietarios e información de auditoría
  • Puede copiar marcas de tiempo de directorio
  • Puede copiar copiar archivos en modo ‘copia de seguridad’ para garantizar que los archivos se copien incluso si se han denegado esos derechos al administrador
  • Reintentos automáticos
  • Puede sincronizar dos carpetas
  • Es lo suficientemente inteligente como para omitir archivos ya copiados
  • Puede copiar rutas de acceso mayores que el límite de 256 caracteres
  • Realizar copias asíncronas utilizando su capacidad de subprocesos múltiples.
  • Devuelve códigos de salida estandarizados para usar en scripts

Como puede ver, hay mucho que copiar. Quería cubrir todo lo que necesitas saber sobre esta práctica herramienta.

Tabla de Contenidos

Referencia de sintaxis común de Robocopy

¿Por qué una publicación de blog tan larga en una sola utilidad? Solo deleite sus ojos en las tablas de abajo. ¡Tiene muchas opciones para copiar o mover archivos con robocopy! Tendrás más opciones en las secciones individuales.

Estas tablas se construyeron a partir de la sintaxis de ayuda devuelta desde 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 Fuente de

Interruptor Explicación Comportamiento Predeterminado Equivalente Interruptor Notas
/S Copiar subcarpetas
/E Copiar subcarpetas incluidas las subcarpetas vacías
/COPIA: opciones de Copia de /COPIA:DAT D=Datos, A=Atributos, T=marcas de tiempo S=Seguridad=NTFS Acl, O=información del Propietario, U=auditoría de información. Datos de archivo (D) siempre incluye marcas de tiempo de archivo (T)
/SEC Copiar archivos con seguridad /COPIA: DATOS
/DCOPY: T Copiar marcas de tiempo de directorio
/COPYALL Copiar TODA la información del archivo /COPIAR: DATSOU Esto evitará la deshidratación de archivos sin conexión y, en su lugar, copiará la etiqueta del archivo (al menos en sistemas emc VNX/Unity). ¡Esto no está oficialmente documentado! Si lo que necesitas es deshidratación (razón por la que encontré este problema), no puedes copiar las ACLs a lo largo de tus archivos. CRÉDITO: Monsieurx (Reddit)
/NOCOPY Copiar NINGÚN archivo info útil con /PURGA
/UN Copiar sólo los archivos con el atributo de Archivo de conjunto de
/M como /A, pero quita el atributo de Archivo de los archivos de origen
/LEV:n Solo copie los n niveles superiores del árbol de fuentes
/MAXAGE: n EDAD máxima de los archivos-excluir archivos con más de n días / fecha
/MINAGE: n EDAD mínima de los archivos-excluir archivos más recientes que n días / fecha Si n < 1900, entonces n = no de días, de lo contrario n = AAAAAMMDD fecha
/FFT Asumir Tiempos de Archivo FAT 2-segunda granularidad de fecha / hora. Esto reemplaza las marcas de tiempo NTFS. Parece ser más confiable cuando se transfiere a través de una red.
/256 apague muy largo camino (> 256 caracteres) apoyo

Opciones de Destino

Interruptor Explicación Comportamiento Predeterminado Equivalente Interruptor Notas
/A+: Establece el atributo de archivo(s) en los archivos de destino + agregar
/Un-: Eliminar atributo (s) de archivo en los archivos de destino
/FAT Crear archivos de destino usando 8.Solo 3 nombres de archivo FAT
/CREAR Crear estructura de árbol de directorios + solo archivos de longitud cero
/Horario de verano Compensar las diferencias horarias de hora de verano de una hora

Opciones de Copia

Conmutador Explicación Comportamiento predeterminado Conmutador equivalente Notas
/L Solo listar archivos «no copiar», la marca de tiempo o borrar todos los archivos
/MOV Mover archivos Eliminar de la fuente después de copiar
/MOVER Mover archivos y directorios Eliminar de la fuente después de copiar
/sl archivo de Copia los enlaces simbólicos en lugar de la de destino
/Z Copiar archivos en modo reiniciable Sobrevivir a una red fallo técnico
/B Copiar archivos en modo de copia de seguridad
/J Copiar usando E/S sin búfer Recomendado para archivos grandes
/NOOFFLOAD Copie archivos sin usar el mecanismo de descarga de copias de Windows https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831628(v = ws.11)
/EFSRAW Copiar archivos cifrados utilizando EFS modo RAW
/TIMFIX archivo de Revisión de veces en todos los archivos, incluso los archivos omitidos
/XO Excluir a los mayores si el archivo de destino existe y que es la misma fecha o posterior de la fuente – no te molestes en sobrescribirlo.
/XC Excluir los archivos que han cambiado
/XN Excluir archivos más recientes
/XX Excluir archivos presentes en el lugar de destino, pero no de la fuente /XX
/XF archivo … Excluir los archivos que coincidan con nombres/rutas/comodines
/XD dirs … Excluir directorios dada la coincidencia de nombres y rutas de acceso. /XF y / XD se pueden usar en combinación, por ejemplo, ROBOCOPY c:\source d:\dest / XF *.doc *.xls /XD c:\unwanted /S
/IA: Incluir archivos con cualquiera de los atributos de
/XA: Excluir archivos con cualquiera de los atributos de
/IM Sobrescribir los archivos modificados. Esto incluye los mismos archivos con diferentes tiempos.
/ES Sobrescribir los archivos, incluso si ya están a la misma
/ES Incluir ajustado archivos
/XJ Excluir los puntos de unión de la fuente /XJ
/XJD Excluir los puntos de unión de los directorios de origen
/XJF Excluir los puntos de unión de los archivos de origen
/MAX:n Excluir archivos de más de n bytes
/MIN:n Excluir archivos más pequeños de n bytes
/MAXLAD:n Excluir archivos no utilizados ya que n
/MINLAD:n Excluir archivos utilizado desde n Si n < 1900 entonces n = n días, else n = AAAAMMDD fecha
/MIR Espejo de un árbol de directorios /PURGA /E
/PURGAR Eliminar dest archivos/carpetas que ya no existen en el origen
/XL Excluir archivos presentes en la fuente, pero no el destino
/SECFIX Robocopy /secfix correcciones de archivo seguridad en todos los archivos, incluso en los archivos omitidos. Especifique el tipo de información de seguridad que desea copiar utilizando también una de estas opciones: / COPYALL/COPY: O / COPY: S / COPY: U / SEC
/ZB Utilice el modo de reinicio; si se deniega el acceso, utilice el modo de copia de seguridad

Opciones de Monitoreo

Conmutador Explicación Comportamiento predeterminado Conmutador equivalente Notas
/R:n Número de reintentos fallidos copias /R:1000000 Siempre intenta establecer esta opción. Recomiendo configurar esto en 10-20 para no perder tiempo volviendo a intentarlo.
/W: n Tiempo de espera entre reintentos / W:30 Siempre intente establecer esta opción en un número más bajo para volver a intentarlo más rápidamente. Sugiero 5-10.
/REG Guardar /R:n y /N:n en el registro de Windows, la configuración predeterminada
/RH:hhmm-hhmm veces cuando las nuevas copias se puede iniciar
/TBD Espere a que sharenames a ser definido reintento de error 67
/PF Verificación de horas de funcionamiento en cada archivo (no por pasada) base
/MON:n Ejecutar de nuevo cuando más de n cambios que se ven
/MOT:m Vuelva a ejecutarse en m minutos, si se cambia

Entendiendo el comportamiento de Robocopy

Ahora te he dejado completamente alucinado con todas las posibles opciones de sintaxis disponibles para ti. Veamos ahora todas las diferentes combinaciones de cómo podemos usar esta sintaxis.

Podría proporcionarle una lista enormemente larga de comandos robocopy con un número cada vez mayor de conmutadores. Pero creo que es mejor enseñarte a pescar. Repasemos cómo darle sentido a todas estas opciones.

Robocopy Solo copia Directorios enteros

Cada ejecución de robocopy tendrá un directorio de origen y un directorio de destino. Robocopy copia y mueve archivos por todo el directorio. No es posible copiar explícitamente un solo archivo con robocopy. Utilice copy o Copy-Item de PowerShell para ello.

Sin embargo, puede copiar automáticamente un solo archivo con el filtrado correcto, del que aprenderá a continuación. Para copiar automáticamente un archivo de un solo archivo, especifique los directorios de origen y de destino inmediatamente seguidos del nombre de archivo en el origen.

> robocopy c:\src d:\dst copythisfile.txt

La sintaxis depende del entorno

Además, las opciones que proporcione a robocopy dependerán del entorno. Tendrás que responder algunas preguntas cuando intentes averiguar qué opciones usar.

  • ¿Siempre estará copiando en un directorio vacío?
  • ¿Es posible que ya existan archivos en el directorio de destino?
  • ¿Va a copiar terabytes de datos o solo unos pocos megabytes?
  • ¿Va a copiar archivos a través de una red o localmente?
  • and y más.

Si no hay archivos en el directorio de archivos de destino, no debería preocuparse por las opciones que sobrescriben archivos. Si no va a copiar archivos a través de la red, no se preocupe por esas opciones. Defina explícitamente sus circunstancias actuales y futuras potenciales en las que estará su entorno.

Reconocer opciones predeterminadas

Robocopy utiliza muchas opciones de forma predeterminada. Puedes elegirlos mirando las tablas de arriba. También proporciona una salida útil cada vez que ejecuta la utilidad.

Puede ver a continuación que cuando ejecuté robocopy con sus opciones más básicas (la carpeta de origen y destino), usó automáticamente algunas opciones. Comprender el comportamiento predeterminado es importante.

Haga referencia a las opciones que ve en la salida con las explicaciones de las opciones anteriores y comprenderá exactamente lo que hace robocopy debajo de las portadas.

Opciones de robocopy predeterminadas
Opciones de robocopy predeterminadas

Comprender lo que pueden hacer los comandos Robocopy

Si ha utilizado cmdlets copy o Copy-Item de PowerShell, es probable que haya especificado un origen y un destino y haya continuado el día. No hay muchas opciones que puedas configurar allí. Estos comandos de robocopy tienen un comportamiento predeterminado.

Pero robocopy, por otro lado, entiende mucho más y le da la flexibilidad para modificar el comportamiento tanto como desee.

Es importante saber que robocopy no solo es consciente del concepto de archivo o directorio. Hay mucho más en un sistema de archivos que eso y robocopy soporta casi todo.

Un archivo que se encuentra en un sistema de archivos no es solo un objeto tonto con un solo propósito. Hay muchos atributos y cosas diferentes que van con el concepto de un archivo. Por ejemplo, un archivo tiene atributos como:

  • una marca de tiempo (escrita, modificada y accedida)
  • NTFS ACL
  • un propietario
  • Información de auditoría NTFS
  • bandera oculta
  • bandera archivada

Cuando copia o mueve una archivo, usted tiene la opción de traer todas esas cosas junto con él, si lo desea.

Comprenda que cuando ejecuta robocopy, no solo está copiando un archivo, sino que también está copiando potencialmente toda la otra información con él. Es importante darse cuenta de ello y tenerlo en cuenta en las opciones que proporcione robocopy.

Lo básico: Realizar escenarios de WhatIf

Si tiene un servidor de archivos enorme en algún lugar que desea migrar y aún no desea realizar ninguna acción, puede usar robocopy para devolver lo que habría hecho.

Con la opción /L, puede indicarle a robocopy que enumere todos los archivos y/o carpetas que especifique y devuelva una lista de archivos que habría copiado / movido.

Puede utilizar la opción /L con cualquier otra opción. Esta es una excelente manera de devolver todas las opciones que robocopy habría utilizado (por defecto o no). Le dará una visión general de lo que robocopy hará dadas las opciones que usted le proporcionó.

Usando /L
Usando /L

Lo básico: Copiar archivos

El uso más básico de robocopy es usar un directorio de origen y destino sin opciones.

> robocopy C:\src C:\dst

Esta opción copiará todos los archivos (excepto las subcarpetas) de C:\src to C:\dst.

También puede copiar todo, incluidas las subcarpetas (vacías o no) y los permisos NTFS. Este es, por lo que puedo decir, el método para copiar literalmente todo lo que hay sobre un directorio de archivos a otro directorio.

A continuación estoy copiando todas las ACLS NTFS, propietarios de archivos, subcarpetas (incluidas las vacías) y todos los atributos de archivo. Todo esto es posible con la opción /E para incluir todas las subcarpetas vacías y /COPYALL para capturar el resto.

> robocopy C:\src C:\dst /E /COPYALL

Lo básico: Mover archivos

Mover archivos transfiere 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 copiar, utilice la opción /MOV. Esto eliminará todos los archivos del directorio especificado (sin subcarpetas).

> robocopy C:\src C:\dst /MOV

también puede usar /MOVE para mover todos los archivos y subcarpetas.

> robocopy C:\src C:\dst /MOVE

Lo básico: Sincronizar archivos

Robocopy le permite sincronizar dos directorios. Esto significa asegurarse de que todos los archivos del directorio de destino estén en el directorio de origen y no más. /MIR replicará los datos copiando todos los archivos en el origen no en el destino y eliminará los archivos en el destino no en el origen. ¡Cuidado!

> robocopy C:\src C:\dst /MIR

Copiar archivos a través de una red

Si está copiando archivos a través de una red, hay algunas opciones que debe considerar.

Robocopy le permite copiar archivos en’ modo reiniciable ‘ utilizando la opción /Z. Esto significa que si un archivo comienza a copiarse y falla a mitad de camino, 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. Hazme saber tus hallazgos.

También puede utilizar la opción /FFT. Se sabe que este conmutador conserva con mayor precisión las marcas de tiempo de los archivos al transferir a través de una red. Esta opción utiliza marcas de tiempo del sistema de archivos FAT en lugar de NTFS.

robocopy C:\src \SRV1\share /Z /FFT

Usando / IPG para Controlar la brecha entre paquetes

Al copiar archivos a través de una red, puede usar el conmutador /IPG. Esto también se conoce como la opción inter-packet gap. Esta opción define (en milisegundos) la frecuencia en la que robocopy esperará entre el envío de paquetes nuevos.

Siempre use rutas UNC, no Letras de unidad

Un lector de Reddit descubrió la forma difícil de no usar unidades asignadas como directorio de destino. En su lugar, siempre use siempre use una ruta de acceso UNC. Es posible que tenga problemas con el límite de 256 caracteres si lo hace. Consulte este documento de Microsoft para obtener más información.

Modo de copia de seguridad Robocopy (Robocopy /Z)

Robocopy tiene una opción (/B) o como copia de seguridad en modo reiniciable (/ZB) que copia los archivos en modo de copia de seguridad. ¿Qué es el «modo de copia de seguridad» de todos modos?

Cuando normalmente copia un archivo en Windows y pulsa un archivo que requiere privilegios administrativos para acceder, recibirá un error que indica que no tiene permiso. Aunque se esté ejecutando como administrador local, Windows no le permitirá acceder a él.

ADVERTENCIA: Ha habido informes de volúmenes de servidor dañados al copiar datos a un servidor de Windows Server 2016 con la función de duplicación activada. Cuando se utiliza el conmutador /ZB, el resultado será un almacén de fragmentos dedup que se destruirá en la Información del volumen del sistema. Los archivos copiados no serán legibles y generarán errores al intentar manipularlos. Serverfault enlace con más información.

El modo de copia de seguridad es una forma de acceder a los archivos sin preocuparse por los permisos.

Robocopy utiliza el modo de copia de seguridad para usar SeBackupPrivilege para leer archivos y el derecho de usuario SeRestorePrivilege para acceder a cualquier archivo que necesite. Esto ignora cualquier AS que normalmente le impediría acceder a esos archivos.

Los derechos de usuario de SeBackupPrivilege y SeRestorePrivilege normalmente se asignan a los usuarios de los grupos Operadores de copia de seguridad y Administradores, pero a veces se pueden eliminar. El módulo de copia de seguridad elimina ese riesgo y otorga temporalmente esos derechos al usuario que ejecuta robocopy.

Si desea verificar si su cuenta de usuario tiene ese derecho, puede ejecutar whoami /priv y ambos derechos deben mostrarse.

Filtrar archivos y carpetas

La gran mayoría de las opciones disponibles para usted son excluir archivos y directorios de muchas maneras diferentes. He desglosado todas las formas en que puede filtrar o excluir archivos y directorios en función de varios criterios.

Por Nombre de archivo o Extensión de archivo

El filtrado de los archivos que se copian / mueven en una llamada robocopy se realiza mediante comodines. Puede usar un comodín para filtrar los archivos que coincidan con una cadena o extensión de nombre de archivo específica.

Por ejemplo, para copiar solo archivos TXT, puede especificar *.txt.

> robocopy C:\src C:\dst *.txt

Si desea limitar solo los archivos que comienzan por a, puede usar un*.

> robocopy C:\src C:\dst a*

Y0u también puede proporcionar varios conjuntos de coincidencias de nombres de archivo separándolos con un espacio como se muestra a continuación.

> robocopy C:\src C:\dst a* b*

Cuando filtra por nombre de archivo, robocopy le mostrará el filtro en la salida.

Salida de archivos de filtrado
Salida de archivos de filtrado

Por Nombre de directorio

Robocopy le permite filtrar elementos no solo por archivo, sino también por nombre de directorio. Usando robocopy /xd, puede excluir ciertos directorios que coincidan con un nombre específico.

Al copiar varias carpetas, utilice el conmutador /XD para excluir carpetas de la ejecución.

> robocopy C:\src C:\dst /XD "c:\src\exclude"

Por Marca de tiempo de archivo/directorio

A continuación encontrará todas las opciones de robocopy que excluirán archivos y carpetas en función de varios atributos de marca de tiempo.

Interruptor Explicación
/DCOPY:T directorio de Copia de marcas de tiempo
/MAXAGE:n Excluir archivos con más de n días/fecha
/MINAGE:n Excluir archivos más recientes que n días / fecha
/XO Si el archivo de destino existe y es de la misma fecha o más reciente que el origen, no sobrescriba
/XN Si el archivo de destino existe y tiene la misma fecha o es anterior al origen, no sobrescriba

Hay dos opciones populares para elegir al filtrar cosas como la marca de tiempo; /XO y /MAXAGE.

/XO le permite excluir archivos de la copia solo si son más nuevos que el origen. Con la opción /XO, puede copiar automáticamente solo los archivos nuevos por fecha de acceso.

> robocopy C:\src C:\dsc /XO

Si sabe que los archivos de edad máxima serán, también puede usar la opción /MAXAGE. Esto le permite especificar en formato YYYMMDD la fecha anterior que un archivo puede tener antes de ser copiado.

> robocopy c:\src c:\dst /S /MAXAGE:20191001

Trabajos de Robocopy

Ha visto que hay docenas de opciones disponibles para usted. Es fácil que estas opciones pronto se vuelvan difíciles de manejar. Afortunadamente, tiene una mejor opción que memorizar y asegurarse de que todas estas opciones estén al día en todo momento.

Los archivos de trabajo de Robocopy son archivos de texto que contienen una opción por línea. Normalmente, usará robocopy para crear estos archivos de trabajo. Una vez creados, puede usar robocopy para modificarlos o un simple editor de texto.

Tiene varios comandos robocopy que funcionan con trabajos.

Interruptor Explicación Comportamiento Predeterminado Equivalente Interruptor Notas
/TRABAJO:jobname Tomar parámetros desde el nombre de archivo de trabajo
/GUARDAR:jobname Guardar parámetros para el nombre de archivo de trabajo
/DEJAR de fumar Dejar de fumar después de la elaboración de la línea de comandos Útil para la visualización de los parámetros de
/NOSD Ninguna fuente de directorio especificado
/NODD Sin directorio de destino especificado
/SI Incluir los siguientes archivos

Un archivo de trabajo típico creado con robocopy tiene una extensión RCJ y se parece al siguiente fragmento de código. Este archivo de trabajo se creó ejecutando robocopy C:\src D:\dst /save:myjob. Puede ver que puede proporcionar comentarios en el archivo de trabajo utilizando :: , que es la mayor parte de lo que tiene este archivo.

Sin comentarios, el archivo solo contendría una opción por línea.

:::: Robocopy Job C:\MYJOB.RCJ:::: Created by Administrator on Sunday, August 18, XXXX at 8:53:24 AM:::::: Source Directory ::: /SD:C:\SRC\ :: Source Directory.:::: Destination Directory ::: /DD:C:\SRC\ :: Destination Directory.:::: Include These Files ::: /IF :: Include Files matching these names:: *.* :: Include all names (currently - Command Line may override):::: Exclude These Directories ::: /XD :: eXclude Directories matching these names:: :: eXclude no names (currently - Command Line may override):::: Exclude These Files ::: /XF :: eXclude Files matching these names:: :: eXclude no names (currently - Command Line may override):::: Copy options ::: /DCOPY:DA :: what to COPY for directories (default is /DCOPY:DA). /COPY:DAT :: what to COPY for files (default is /COPY:DAT).:::: Retry Options ::: /R:1000000 :: number of Retries on failed copies: default 1 million. /W:30 :: Wait time between retries: default is 30 seconds.:::: Logging Options :::

Guardar archivos de trabajo

Guardar un archivo de trabajo es tan simple como añadir la opción /SAVE:<jobname> al final de la sintaxis. Sustitúyase <jobname> por el nombre del trabajo. La opción /SAVE creará un archivo llamado < jobname>.rcj en el directorio donde ejecutaste robocopy.

> robocopy C:\src C:\dst /SAVE:myjob

Debe especificar /SAVE como última opción. Las opciones especificadas después de /SAVE no se agregarán al archivo de trabajo. Además, tenga en cuenta que, incluso si ya existe un archivo de trabajo existente, robocopy siempre sobrescribirá el archivo existente. Copia de seguridad o control de versiones de sus archivos de trabajo!

Nota: Si intenta utilizar la opción /MT al guardar en un archivo de trabajo, no estará en el archivo de trabajo. Avísame si lograste que se incluyera esto.

Uso de archivos de trabajo

Una vez que se guarda un trabajo en un archivo de trabajo, puede usar la opción /JOB:<jobname> para especificar el archivo de trabajo desde el que leer. Robocopy lee todos los parámetros dentro del archivo de trabajo. Luego se ejecuta como si hubiera proporcionado las opciones directamente en la línea de comandos.

> robocopy /JOB:myjob

Crear un archivo de trabajo Sin Ejecutar un trabajo Usando / QUIT

El propósito de la opción /QUIT no es obvio. En la superficie, puede pensar que /QUIT fuerza a una carrera a salir. En su lugar, /QUIT actúa más como una opción para evitar que se ejecute un trabajo en primer lugar.

Oficialmente, la opción /QUIT «fuerza a robocopy a terminar de procesar la línea de comandos». Sin embargo, sería mejor explicarlo como crear un archivo de trabajo sin ejecutar un trabajo.

Si utiliza 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. Puede crear el archivo de trabajo RCJ con un editor de texto o puede usar robocopy para hacerlo añadiendo /QUIT al final.

> robocopy C:\src C:\dst /SAVE:myjob /QUIT

Editar un archivo de trabajo

Dado que los archivos de trabajo son solo archivos de texto, puede editarlos con su editor de texto favorito o hacer que robocopy lo haga por usted.

Puede editar archivos de trabajo con una combinación de /JOB, /SAVE y /QUIT.

Por ejemplo, tal vez desee excluir todos los archivos EXE de su trabajo de robocopy guardados en un archivo de trabajo llamado archivos de copia de seguridad.rcj. Ya ha creado el archivo de trabajo y no desea sobrescribirlo todo. Puede agregar la nueva opción como a continuación:

> robocopy /JOB:backupfiles /XF *.EXE /SAVE:backupfiles /QUIT

Utilizando varios archivos de trabajo

Incluso puede combinar el uso de archivos de trabajo. Al especificar varios archivos de trabajo en la misma ejecución, se combinarán todas las opciones utilizadas en esa ejecución.

Por ejemplo, tal vez tenga una gran lista de archivos para excluir de su trabajo de copia de archivos de copia de seguridad. Abra un editor de texto y agregue lo siguiente para crear una exclusión.archivo rcj.

/XF a.exe b.txt c.cer

A continuación, puede excluir estos archivos del trabajo backupfiles de la siguiente manera:

> robocopy /JOB:backupfiles /JOB:exclude

Dado que el archivo de trabajo de backupfiles original ya excluía todos los archivos EXE, la sintaxis de la ejecución anterior se vería como /XF *.exe a.exe b.txt c.cer. Robocopy combina todas las opciones en una sola.

Plantillas Robocopy y Con las opciones /NOSD y / NODD

Si trabaja con muchos archivos de trabajo, puede crear archivos de trabajo para aceptar parámetros. Robocopy le permite pasar valores de la línea de comandos a los trabajos cuando se ejecutan. Un parámetro no es un término robocopy, pero encaja bien en este escenario.

Puede crear trabajos robocopy para aceptar parámetros si no especifica un directorio de origen o de destino, ya sea explícitamente con las opciones /NOSD y /NODD o simplemente no incluye un directorio de origen y de destino.

Para un ejemplo sencillo, cree un archivo de trabajo sin origen ni destino utilizando la siguiente sintaxis. La intención de este trabajo es copiar todos los archivos TXT y EXE de un directorio de origen a un directorio de destino.

> robocopy *.txt *.exe /SAVE:backupfiles /QUIT

Por sí solo, este trabajo nunca funcionará porque no se ha especificado ningún directorio de origen o destino.

Al crear un trabajo sin directorio de origen y destino, el archivo de trabajo se crea automáticamente con las opciones /NOSD y /NODD.

/NOSD /NODD/IF *.txt *.exe/DCOPY:DA/COPY:DAT/R:1000000/W:30

Las opciones /NOSD le indican a robocopy que no incluyó un directorio de origen, mientras que /NODD indica que no incluyó un directorio de destino. Este archivo de trabajo es una «plantilla» para otros trabajos.

Pero puede 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 desde C:\src a C:\dst, puede pasar estos directorios directamente en la línea de órdenes que luego se pasarán al trabajo.

> robocopy /JOB:backupfiles C:\src C:\dst

Copia asíncrona (Robocopy /MT)

De forma predeterminada, robocopy solo procesa un archivo a la vez. Sin embargo, puede forzar a robocopy a copiar más archivos que a la vez mediante la opción /MT.

La opción /MT le permite especificar el número de subprocesos que robocopy utilizará para copiar archivos. El máximo es de 128.

Puedes usar /MT así:

> robocopy C:\src C:\dst /MT:32

He elegido 32 en este caso como línea de base. Sugiero comenzar en 32 para ver cómo su computadora y red manejan las cosas y ajustar los hilos en consecuencia.

Tenga en cuenta que si usa /MT, no podrá usar /IPGo /EFSRAW. Para un mejor rendimiento, no envíe el registro a la consola. En su lugar, utilice /LOG.

Programación Robocopy

Robocopy tiene varias formas de programar cuando se ejecuta.

Usando /RH

Usando la opción /RH, puede indicar a robocopy que solo se ejecute durante un tiempo específico. Esto es genial si tiene una ventana de mantenimiento o un momento en el que todos se han ido a casa por el día.

Puede 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 p. m. y las 9 a. m., según lo definido por el reloj del sistema, ejecute:

> robocopy C:\src C:\dst /RH:1700-0900

Verá que si invoca robocopy fuera de esas horas, le indicará la hora actual y esperará a que se ejecute la hora de inicio.

Robocopy le dice a qué hora se iniciará si está programado
Robocopy le dice a qué hora se iniciará si está programado

Debe asegurarse de que ambos tiempos estén en un formato de 24 horas y tengan exactamente cuatro dígitos. La ventana debe ser mayor de dos minutos.

De forma predeterminada, el uso de /RH comprobará la hora de inicio antes de toda la ejecución. Sin embargo, si tiene muchos archivos y cree que el proceso puede durar más, puede usar la opción /PF. /PF forzará a robocopy a comprobar la ventana antes de cada archivo.

Usando el Programador de tareas

El Registro de salida

Robocopy siempre devolverá un registro de salida. Depende de usted si ese registro se muestra a través de la salida estándar en la consola y/o se redirige a un archivo de registro.

Tiene muchas opciones al mostrar la salida de robocopy.

Interruptor Explicación Comportamiento Predeterminado Equivalente Interruptor Notas
/NP No hay progreso. Suprime la visualización de información de progreso. Esto puede ser útil cuando la salida se redirige a un archivo.
/unicode Mostrar el estado de salida como texto unicode
/LOG:archivo el estado de la Salida del archivo de registro y sobrescribir
/UNILOG:archivo el estado de la Salida unicode archivo de registro y sobrescribir
/REGISTRO+:archivo el estado de la Salida del archivo de registro y anexar al archivo de registro existente
/UNILOG+:archivo el estado de la Salida unicode archivo de registro y anexar al archivo de registro existente
/TS Muestra el archivo de tiempo para cada archivo procesado.
/FP Reemplaza simples nombres de archivo con archivo completo de ruta de acceso en la salida.
/NS no se muestran los tamaños de archivo.
/NC Oculta de la salida de la clase de archivo de Texto de «Etiquetas» (Vaya aquí para obtener más información: https://www.uvm.edu/~gcd/2015/04/robocopy-file-classes/)
/la NFL Oculta los nombres de archivo. Sin embargo, los fallos siguen registrados. Los archivos los archivos eliminados o borrados si /L se omite siempre se registran
/NDL Oculta de salida de la lista de directorio. Los nombres de ruta completos de los archivos se generan para rastrear más fácilmente los archivos problemáticos.
/TEE Salida a la ventana de la consola, así como el archivo de registro
/NJH Sin trabajo encabezado
/NJS Sin trabajo resumen
/BYTES tamaños de Impresión como bytes
/X Informe de todos los archivos, no sólo los seleccionados & copiar
/V Producir detallado registro de salida, que muestra los archivos omitidos
/ETA Mostrar el tiempo estimado de la llegada de los archivos copiados. Consulte la hora de inicio de cada copia de archivo y el tiempo estimado de finalización en función del rendimiento observado de copias anteriores. Los tiempos se muestran después del nombre del archivo en el formato HH: MM – > HH: MM (start – > finish).
/DEPURAR Mostrar información del volumen de depuración

Limitación de elementos de registro con /NJS y / NJH

De forma predeterminada, robocopy devuelve dos elementos en su salida, un encabezado de trabajo y un resumen de trabajo.

El encabezado del trabajo es el encabezado simple de ROBOCOPY en la parte superior.

Encabezado de trabajo Robocopy
Encabezado de trabajo Robocopy

El resumen del trabajo muestra un estado de resumen de todos los archivos/carpetas, la cantidad de datos transferidos y la hora en que finalizó la ejecución.

Resumen de trabajos de Robocopy
Resumen de trabajos de Robocopy

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

Ocultar el encabezado del trabajo y el resumen del trabajo
Ocultar el encabezado del trabajo y el resumen del trabajo

Redirigir el registro de salida a un archivo

Si necesita guardar el registro de salida, puede redirigirlo a un archivo de texto y/o mostrarlo en la consola. Puede hacerlo utilizando redireccionadores de salida tradicionales como >, >>, PowerShell o la opción /LOG.

Para redirigir el registro de salida a un archivo utilizando la opción /LOG sobrescribir cualquier archivo de registro existente, utilice la sintaxis /LOG:<filepath> como se muestra a continuación. La única salida que recibirá en la consola es la ruta al archivo de registro.

> robocopy C:\src C:\dst /LOG:c:\file.log Log File : c:\file.log

Si desea conservar el contenido de cualquier archivo de registro existente y agregar resultados a un archivo, puede usar el operador + como se muestra a continuación.

> robocopy C:\src C:\dst /LOG+:c:\file.log Log File : c:\file.log

Redirigir el registro de salida a un archivo y Mostrarlo en la consola

Si desea guardar el registro de salida en un archivo pero también verlo en la consola, puede usar la opción /TEE. Esta opción hace que robocopy escriba la salida en el archivo de registro mientras mantiene el comportamiento predeterminado de devolver la salida a la consola.

robocopy C:\src C:\dst /LOG+:c:\file.log /TEE

Códigos de salida

Al igual que todas las demás utilidades de línea de comandos, robocopy devuelve códigos de salida en función de los resultados de la ejecución. Todos deseamos que robocopy siempre salga con éxito con 0, pero eso no siempre sucede.

A continuación encontrará todo el código de salida que devuelve robocopy y su explicación. Cualquier código de salida mayor que siete indica al menos un error durante la ejecución.

Código de Salida Explicación
0 Ninguna acción realizada. El origen y el destino están sincronizados.
1 Al menos un archivo se ha copiado correctamente.
2 Se detectaron archivos o directorios adicionales. Examine el registro.
3 códigos de Salida 2 y 1 combinado.
4 Se encontraron archivos o directorios que no coincidían. Examine el registro.
5 Códigos de salida 4 y 1 combinados.
6 Códigos de salida 4 y 2 combinados.
7 códigos de Salida 4, 1 y 2 combinados.
8 No se pudo copiar al menos un archivo o directorio. Límite de reintentos excedido. Examine el registro.
16 Copia fallado catastróficamente.

Tenga en cuenta que si está ejecutando robocopy en una utilidad de terceros, esa utilidad puede pensar que cualquier código de salida distinto de cero es un error. Para evitar esto, puede cambiar el código de salida a 0 si devuelve 1.

El código de salida del archivo «extra» de Robocopy es un código de retorno común que significa que un archivo «extra» está en la carpeta de destino, pero no en la carpeta de origen. Este código excluye los extras que evitarán cualquier eliminación del destino.

Cambiar el código de salida en un archivo por lotes

Si ejecuta robocopy con un archivo por lotes, puede encontrar el valor de la variable %ERRORLEVEL%. Si devuelve 1, utilice la palabra clave exit para salir del script con 0.

> (robocopy <options>) ^& IF %ERRORLEVEL% LEQ 1 exit 0

Cambiar el código de salida de un script de PowerShell

Si ejecuta robocopy en un script de PowerShell, puede invocar robocopy con Start-Process mediante PassThru para devolver el proceso creado y Wait para esperar a que finalice robocopy. A continuación, puede comprobar que la propiedad ExitCode tiene un valor de 1. Si el código de salida es 1, salga del script de PowerShell con un 0 utilizando $host.SetShouldExit().

$exitCode = (Start-Process -FilePath 'robocopy' -ArgumentList '<option>' -PassThru -Wait).ExitCodeif ($exitCode -eq 1) { $host.SetShouldExit(0)}

Errores comunes

Si está tratando con miles de archivos, seguramente encontrará algunos problemas. Aquí hay un desglose de errores comunes que he encontrado

Error Parámetro no válido

Cuando ve un error que indica error parámetro no válido, esto normalmente significa que ha intentado pasar opciones a robocopy fuera de secuencia de alguna manera. Parece que el error del parámetro 3 no válido de robocopy es el más común.

Una razón común por la que recibiría este error es cuando especifica un directorio de origen o destino con espacios y olvida rodearlo con comillas.

Ejemplos de Robocopy

¡Puede construir sus propias cadenas de robocopy o puede tomar lo que otros han aprendido y usarlos! En esta sección, cubriré casos de uso sobre cómo usar robocopy para lograr varias cosas.

Buscar el tamaño de directorio de una carpeta de red

Colaborador: northendtroooper (Reddit)

> robocopy "\MACHINE\fileshare" c:\dummy /l /xj /e /nfl /ndl /njh /r:0 /mt:64

Elimina rápidamente el contenido de las carpetas (ignorando los permisos de las subcarpetas)

Colaborador: pizzasteveo (Reddit)

> robocopy c:\dummy c:\foldertodelete /MIR

Realizar migraciones de archivos grandes

Colaborador: @ MySnozzberries (Twitter)

El objetivo de este fragmento de código es devolver la propiedad de todos los archivos a los administradores. Luego agregamos un ACE explícito para el grupo Administradores para un control total sobre cada objeto recursivamente, aunque también estamos configurando la herencia.

Finalmente, hacemos una copia completa de robocopy con DACLs al destino con registro. El registro se puede revisar para detectar problemas de permisos adicionales o simplemente bloqueos de archivos y se puede realizar otra sincronización delta más tarde.

> takeown /F .\test /R /A /D Y> icacls .\test /grant "Administrators":(OI)(CI)F /T> robocopy .\test .\test2 /E /SEC /FP /V /LOG:.\temp.log

Forzar recursivamente al grupo Administradores como propietario de todos los archivos y directorios. Puede haber maneras de evitar esto, pero este es el enfoque más pesado y, por lo general, el más rápido.

> takeown /F .\test /R /A /D Y

Una vez que somos el propietario, ahora podemos forzar un nuevo ACE en la DACL para cada objeto. Esto otorga a los administradores un control total con la herencia habilitada y recursivamente a través de la ruta de acceso.

Establecer esto en la raíz con herencia cubriría el entorno, pero cuando un recurso compartido tiene PROPIETARIO CREADOR con Control Total (lo que lamentablemente es incluso la recomendación de Microsoft para cosas como almacenes de perfiles de usuario de archivos), el usuario puede deshabilitar la herencia o eliminar ASEs a su discreción. Por lo tanto, una mano pesada suele ser la solución más rápida.

> icacls .\test /grant "Administrators":(OI)(CI)F /T

Una vez que hemos cambiado las DACL en la mayoría de los archivos, intentamos copiar los archivos a una nueva ubicación, común para cosas como las migraciones de archivos compartidos. Para ello, estamos copiando los elementos recursivamente y utilizando el conmutador /SEC para copiar también los Datos / Atributos/Marcas de tiempo / DACL.

Luego registramos la operación con rutas completas y para todos los objetos (/V conmutador detallado) en un registro, para que podamos corregir el <5% de errores que comúnmente están relacionados con la longitud de ruta o el bloqueo de archivos y obtener más granulares.

> robocopy .\test .\test2 /E /SEC /FP /V /LOG:.\temp.log

Este es un marco simple para administrar una migración de archivos compartidos con un impacto mínimo en la experiencia del usuario. También mejora el control QUE tiene sobre los datos. Si un cliente tiene una práctica sólida de gobierno de datos en la que la propiedad se administra correctamente 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 usar solo ASES basados en herencia y grupos, por lo que esta es la situación más común y la solución que comenzamos.

Alternativas de Robocopy

Robocopy es una herramienta increíble, pero hay muchas otras herramientas similares que pueden ser de interés.

  • xxcopy-Una utilidad de línea de comandos similar con toneladas de opciones.
  • Cmdlet de PowerShell de elementos de copia: no tan destacado, pero mucho más sencillo.
  • TreeSize-GUI y utilidad de scripts para encontrar información de carpetas.

Resumen

Robocopy es una excelente herramienta para copiar grandes conjuntos de archivos. Ya sea que esté realizando una migración de datos, manteniendo las carpetas sincronizadas o simplemente necesite una forma rápida de copiar archivos con precisión, robocopy es una excelente opción.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.