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.
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ó.
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.
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/IPG
o/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.
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.
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.
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.
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.