Robocopy est l’un des utilitaires de ligne de commande les plus utilisés pour copier de gros volumes de données dans Windows. C’est un outil si populaire en raison de sa puissance. Mais avec tout ce pouvoir vient la complexité. Dans ce guide, nous allons décomposer toute cette complexité et fournir un tutoriel complet sur l’utilisation de cet outil utile.
Robocopy est un utilitaire de ligne de commande Windows disponible depuis Windows NT. C’est un remplacement pour l’utilitaire xcopy moins polyvalent. Il vous permet de spécifier un chemin de lecteur ou un chemin de serveur pour copier / déplacer des fichiers à une invite de commande.
La version de Robocopy à ce jour est jusqu’à 10.0.18. C’est la version sur laquelle j’ai effectué mes tests.
Robocopy fournit une multitude de fonctionnalités que vous pouvez exploiter pour effectuer des copies et des mouvements de fichiers efficaces et rapides. Il peut:
- Copier des fichiers sur un réseau avec des capacités de reprise
- Peut ignorer les points de jonction NTFS provoquant une défaillance généralement à partir de boucles infinies
- Peut copier les attributs de fichier et de répertoire en préservant les horodatages
- Peut copier les autorisations, les propriétaires et les informations d’audit NTFS
- Peut copier les horodatages de répertoire
- Peut copiez les fichiers en mode « sauvegarde » pour vous assurer que les fichiers sont copiés même si ces droits ont été refusés à l’administrateur
- Tentatives automatiques
- Peut synchroniser deux dossiers
- Est assez intelligent pour ignorer les fichiers déjà copiés
- Peut copier des chemins plus grands que la limite de chemin de 256 caractères
- Effectue des copies asynchrones en utilisant sa capacité de multithreading.
- Renvoie des codes de sortie standardisés pour une utilisation dans des scripts
Comme vous pouvez le voir, il y a beaucoup à copier. Je voulais couvrir tout ce que vous devez savoir sur cet outil pratique.
Table des Matières
Référence de syntaxe de Robocopie commune
Pourquoi un si long article de blog sur un seul utilitaire? Régalez vos yeux sur les tables ci-dessous. Vous avez beaucoup d’options pour copier ou déplacer des fichiers avec robocopy! Vous aurez plus d’options dans les sections individuelles.
Ces tables ont été construites à partir de la syntaxe d’aide renvoyée par robocopy /?
. Ils ont été divisés en sections plus significatives, ajoutées au fil du temps et nettoyées pour fournir des informations plus utiles.
Options de source
Commutateur | Explication | Comportement par défaut | Commutateur équivalent | Notes |
/ S | Copier les sous-dossiers | |||
/ E | Copier des sous-dossiers, y compris des sous-dossiers vides | |||
/ COPIER: | Options de copie | / COPIER: DAT | D= Données, A = Attributs, T = Horodatages S = Sécurité = NTFS ACLs, O = Informations sur le propriétaire, U = Informations d’audit. Les données de fichier (D) incluent toujours les horodatages de fichier (T) | |
/ SEC | Copier des fichiers avec sécurité | / COPIE: DATS | ||
/ DCOPY: T | Horodatage du répertoire de copie | |||
/ COPYALL | Copier TOUTES LES informations du fichier | / COPY: DATSOU | Cela empêchera la déshydratation des fichiers hors ligne et copiera plutôt la balise du fichier (sur les systèmes emc VNX /Unity au moins). Ce n’est pas officiellement documenté! Si la déshydratation est ce dont vous avez besoin (raison pour laquelle j’ai trouvé ce problème), vous ne pouvez pas copier les listes de contrôle d’accès le long de vos fichiers. CRÉDIT : Monsieurx (Reddit) | |
/ NOCOPY | Copier AUCUNE information sur le fichier | utile avec / PURGE | ||
/ A | Copie uniquement les fichiers avec le jeu d’attributs Archive | |||
/ M | j’aime /A, mais supprime l’attribut Archive des fichiers source | |||
/ LEV:n | Copiez uniquement les n niveaux supérieurs de l’arborescence source | |||
/ MAXAGE: n | ÂGE maximum du fichier – exclure les fichiers plus anciens que n jours / date | |||
/ MINAGE: n | ÂGE minimum du fichier – exclure les fichiers plus récents que n jours / date | Si n < 1900 alors n = nombre de jours, sinon n = date AAAAMMJJ | ||
/ FFT | Supposons les temps de fichier FAT | 2- deuxième granularité de date / heure. Cela remplace les horodatages NTFS. Semble être plus fiable lors du transfert sur un réseau. | ||
/256 | Désactiver le support de chemin très long (> 256 caractères) |
Options De Destination
Commutateur | Explication | Comportement par défaut | Commutateur équivalent | Notes |
/ A+ : | Définir les attributs de fichier sur les fichiers de destination + ajouter | |||
/ A-: | Supprimer les attributs de fichier sur les fichiers de destination | |||
/ FAT | Crée des fichiers de destination à l’aide de 8.3 noms de fichiers FAT uniquement | |||
/ CRÉER | Créer une arborescence de répertoires + fichiers de longueur nulle uniquement | |||
/ DST | Compenser les différences de temps DST d’une heure |
Options de Copie
Commutateur | Explication | Comportement par défaut | Commutateur équivalent | Notes |
/ L | Liste des fichiers uniquement | Ne copiez, n’horodatez ni ne supprimez aucun fichier | ||
/ MOV | Déplacer des fichiers | Supprimer de la source après la copie | ||
/ DÉPLACER | Déplacer des fichiers et des répertoires | Supprimer de la source après la copie | ||
/ sl | Copie les liens symboliques du fichier au lieu de la cible | |||
/ Z | Copie des fichiers en mode redémarrable | Survivre à un réseau pépin | ||
/ B | Copier des fichiers en mode de sauvegarde | |||
/ J | Copier en utilisant des E/S non tamponnées | Recommandé pour les fichiers volumineux | ||
/ NOOFFLOAD | Copiez des fichiers sans utiliser le mécanisme de déchargement de copie Windows | https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831628( v = ws.11) | ||
/ EFSRAW | Copiez tous les fichiers chiffrés en mode EFS RAW | |||
/ TIMFIX | Correction de la durée des fichiers sur tous les fichiers, même les fichiers ignorés | |||
/ XO | Exclure plus ancien | si le fichier de destination existe et a la même date ou est plus récent que la source, ne vous embêtez pas à l’écraser. | ||
/ XC | Exclure les fichiers modifiés | |||
/ XN | Exclut les fichiers plus récents | |||
/ XX | Exclure les fichiers présents dans la destination mais pas la source | /XX | ||
/ Fichier XFExclude | Exclure les fichiers correspondant aux noms/chemins/ caractères génériques | |||
/ XD dirsExclude | Exclut les répertoires correspondant aux noms/chemins donnés. | / XF et /XD peuvent être utilisés en combinaison, par exemple ROBOCOPY c:\source d:\dest / XF*.doc *.XL / XD c:\unwanted / L | ||
/ IA: | Inclure des fichiers avec l’un des attributs donnés | |||
/ XA: | Exclure les fichiers avec l’un des attributs donnés | |||
/ IM | Remplace les fichiers modifiés. Cela inclut les mêmes fichiers avec des heures différentes. | |||
/ EST-ce QUE | Écrase des fichiers même s’ils sont déjà les mêmes | |||
/ IL | Inclut des fichiers modifiés | |||
/ XJ | Exclure les points de jonction de la source | / XJ | ||
/ XJD | Exclut les points de jonction des répertoires sources | |||
/ XJF | Exclut les points de jonction de fichiers sources | |||
/ MAX: n | Exclure les fichiers plus grands que n octets | |||
/ MIN: n | Exclure les fichiers inférieurs à n octets | |||
/ MAXLAD: n | Exclut les fichiers inutilisés depuis n | |||
/ MINLAD:n | Exclure les fichiers utilisés depuis n | Si n < 1900 alors n = n jours, sinon n = date AAAAMMJJ | ||
/ MIR | Miroir d’une arborescence de répertoires | / PURGE / E | ||
/ PURGE | Supprime les fichiers/dossiers dest qui n’existent plus dans la source | |||
/ XL | Exclut les fichiers présents dans la source mais pas dans la destination | |||
/ SECFIX | Robocopy /secfix corrige le fichier sécurité sur tous les fichiers, même les fichiers ignorés. | Spécifiez le type d’informations de sécurité que vous souhaitez copier en utilisant également l’une des options suivantes : /COPYALL/COPY:O/COPY:S/COPY:U/SEC | ||
/ ZB | Utilisez le mode restarable; si l’accès est refusé, utilisez le mode de sauvegarde |
Options de Surveillance
Commutateur | Explication | Comportement par défaut | Commutateur équivalent | Notes |
/ D:n | Nombre de tentatives sur des copies ayant échoué | /R:1000000 | Essayez toujours de définir cette option. Je recommande de régler cela sur 10-20 pour ne pas perdre de temps à réessayer. | |
/ W: n | Temps d’attente entre les tentatives | /W:30 | Essayez toujours de définir cette option sur un nombre inférieur pour réessayer plus rapidement. Je suggère 5-10. | |
/ REG | Enregistrer /R:n et /W:n dans le registre Windows comme paramètres par défaut | |||
/ RH:hhmm – hhmm | fois où de nouvelles copies peuvent être démarrées | |||
/ À déterminer | Attendez que les noms de partage soient définis | erreur de nouvelle tentative 67 | ||
/ PF | Vérifier les heures d’exécution par fichier (et non par passage) | |||
/ MON : n | S’exécute à nouveau lorsque plus de n changements sont visibles | |||
/ MOT:m | Exécuter à nouveau en m minutes, si modifié |
Comprendre le comportement de Robocopie
Je vous ai maintenant complètement époustouflé avec toutes les options de syntaxe potentielles à votre disposition. Voyons maintenant toutes les différentes combinaisons de la façon dont nous pouvons utiliser cette syntaxe.
Je pourrais vous fournir une liste extrêmement longue de commandes robocopy avec un nombre toujours croissant de commutateurs. Mais je pense qu’il vaut mieux vous apprendre à pêcher. Voyons comment donner du sens à toutes ces options.
Robocopy Copie Uniquement des répertoires entiers
Chaque exécution de robocopy aura un répertoire source et un répertoire de destination. Robocopy copie et déplace des fichiers par répertoire entier. Il n’est pas possible de copier explicitement un seul fichier avec robocopy. Utilisez copy
ou Copy-Item
de PowerShell pour cela.
Cependant, vous pouvez robocopier un seul fichier avec le bon filtrage que vous apprendrez ci-dessous. Pour effectuer une robocopie d’un seul fichier, spécifiez les répertoires source et de destination immédiatement suivis du nom du fichier dans la source.
> robocopy c:\src d:\dst copythisfile.txt
La syntaxe Dépend de l’environnement
De plus, les options que vous fournissez à robocopy dépendront de l’environnement. Vous devrez répondre à quelques questions lorsque vous tenterez de déterminer les options à utiliser.
- Allez-vous toujours copier dans un répertoire vide?
- Est-il possible que des fichiers existent déjà dans le répertoire de destination?
- Allez-vous copier des téraoctets de données ou juste quelques mégaoctets?
- Allez-vous copier des fichiers sur un réseau ou localement?
- … et plus.
S’il n’y a pas de fichiers dans le répertoire du fichier de destination, vous ne devriez pas vous soucier des options qui écrasent les fichiers. Si vous ne copiez pas de fichiers sur le réseau, ne vous inquiétez pas de ces options. Définissez explicitement les circonstances actuelles et futures potentielles dans lesquelles se trouvera votre environnement.
Reconnaître les options par défaut
Robocopy utilise de nombreuses options par défaut. Vous pouvez les choisir en regardant les tableaux ci-dessus. Il fournit également une sortie pratique à chaque fois que vous exécutez l’utilitaire.
Vous pouvez voir ci-dessous que lorsque j’ai exécuté robocopy avec ses options les plus basiques (le dossier source et de destination), il utilisait automatiquement certaines options. Comprendre le comportement par défaut est important.
Référencez les options que vous voyez dans la sortie avec les explications d’options ci-dessus et vous comprendrez exactement ce que robocopy fait sous les couvertures.
Comprendre ce que les commandes Robocopy peuvent faire
Si vous avez utilisé des applets de commande copy
ou Copy-Item
de PowerShell, vous avez probablement spécifié une source et une destination et vous avez continué votre journée. Il n’y a pas beaucoup d’options que vous pouvez configurer là-bas. Ces commandes robocopy ont un comportement par défaut.
Mais robocopy, en revanche, comprend beaucoup plus et vous donne la flexibilité de modifier le comportement autant que vous le souhaitez.
Il est important de savoir que robocopy ne connaît pas seulement le concept de fichier ou de répertoire. Il y a beaucoup plus dans un système de fichiers que cela et robocopy prend en charge à peu près tout.
Un fichier assis sur un système de fichiers n’est pas seulement un objet stupide avec un seul but. Il y a beaucoup d’attributs et de choses différents qui vont avec le concept d’un fichier. Par exemple, un fichier possède des attributs tels que:
- un horodatage (écrit, modifié et consulté)
- NTFS ACL
- un propriétaire
- Informations d’audit NTFS
- drapeau caché
- drapeau archivé
Lorsque vous copiez ou déplacez une fichier, vous avez la possibilité d’apporter tout cela avec, si vous le souhaitez.
Comprenez que lorsque vous exécutez robocopy, vous ne copiez pas seulement un fichier, vous copiez également potentiellement toutes les autres informations avec lui. Il est important de le réaliser et d’en tenir compte dans les options que vous fournissez robocopy.
Les bases: Effectuer des scénarios WhatIf
Si vous avez un énorme serveur de fichiers quelque part que vous souhaitez migrer et que vous ne souhaitez pas encore prendre d’action, vous pouvez utiliser robocopy pour retourner ce qu’il aurait fait.
En utilisant l’option /L
, vous pouvez indiquer à robocopy d’énumérer tous les fichiers et/ou dossiers que vous spécifiez et de renvoyer une liste de fichiers qu’il aurait copiés/déplacés.
Vous pouvez utiliser l’option /L
avec n’importe quelle autre option. C’est un excellent moyen de renvoyer toutes les options que robocopy aurait utilisées (par défaut ou non). Il vous donnera une vue d’ensemble de ce que robocopy fera compte tenu des options que vous lui avez fournies.
Les bases: Copier des fichiers
L’utilisation la plus élémentaire de robocopy consiste à utiliser un répertoire source et de destination sans options.
> robocopy C:\src C:\dst
Cette option copiera tous les fichiers (à l’exclusion des sous-dossiers) de C:\src à C:\dst .
Vous pouvez également tout copier, y compris les sous-dossiers (vides ou non) et les autorisations NTFS. C’est, d’après ce que je peux dire, la méthode pour copier littéralement tout ce qu’il y a sur un répertoire de fichiers dans un autre répertoire.
Ci-dessous, je copie toutes les listes ACL NTFS, les propriétaires de fichiers, les sous-dossiers (y compris les vides) et tous les attributs de fichier. Tout cela est rendu possible avec juste l’option /E
pour inclure tous les sous-dossiers vides et /COPYALL
pour attraper le reste.
> robocopy C:\src C:\dst /E /COPYALL
Les bases: Déplacer des fichiers
Déplacer des fichiers transfère des fichiers d’un répertoire à un autre comme le fait la copie. La seule différence avec une opération de déplacement est que les fichiers source sont supprimés après la copie.
Pour supprimer des fichiers/répertoires de la source après la copie, utilisez l’option /MOV
. Cela supprimera tous les fichiers du répertoire spécifié (pas de sous-dossiers).
> robocopy C:\src C:\dst /MOV
Vous pouvez également utiliser /MOVE
pour déplacer tous les fichiers et sous-dossiers.
> robocopy C:\src C:\dst /MOVE
Les bases: Synchroniser des fichiers
Robocopy vous permet de synchroniser deux répertoires. Cela signifie soit s’assurer que tous les fichiers du répertoire de destination sont dans le répertoire source et pas plus. /MIR
répliquera les données en copiant tous les fichiers de la source qui ne se trouvent pas dans la destination et supprimera les fichiers de la destination qui ne se trouvent pas dans la source. Attention !
> robocopy C:\src C:\dst /MIR
Copie de fichiers sur un réseau
Si vous copiez des fichiers sur un réseau, vous devez envisager quelques options.
Robocopy vous permet de copier des fichiers en « mode redémarrable » en utilisant l’option /Z
. Cela signifie que si un fichier commence à copier et échoue à mi-chemin, la copie peut recommencer au lieu d’échouer complètement. L’option /Z
est utile lorsque le flux est coupé sur un réseau.
Avertissement: Certains ont signalé que l’utilisation de
/Z
réduisait les performances de 1/4. Faites-moi savoir vos découvertes.
Vous pouvez également utiliser l’option /FFT
. Ce commutateur est connu pour préserver plus précisément les horodatages des fichiers lors du transfert sur un réseau. Cette option utilise les horodatages du système de fichiers FAT au lieu de NTFS.
robocopy C:\src \SRV1\share /Z /FFT
Utilisation de /IPG pour contrôler l’écart entre paquets
Lors de la copie de fichiers sur un réseau, vous pouvez utiliser le commutateur /IPG
. Ceci est également connu sous le nom d’option inter-packet gap. Cette option définit (en millisecondes) la fréquence à laquelle robocopy attendra entre l’envoi de nouveaux paquets.
Utilisez toujours des chemins UNC et non des lettres de lecteur
Un lecteur sur Reddit a découvert la manière difficile de ne pas utiliser les lecteurs mappés comme répertoire de destination. Au lieu de cela, toujours utiliser toujours utiliser un chemin UNC. Vous pourriez rencontrer des problèmes avec la limite de 256 caractères si vous le faites. Consultez ce document Microsoft pour plus d’informations.
Mode de sauvegarde Robocopy (Robocopy /Z)
Robocopy a une option (/B
) ou en tant que sauvegarde en mode redémarrable (/ZB
) qui copie les fichiers en mode de sauvegarde. Qu’est-ce que le « mode de sauvegarde » de toute façon?
Lorsque vous copiez habituellement un fichier dans Windows et que vous accédez à un fichier nécessitant des privilèges d’administration pour y accéder, une erreur vous indique que vous n’avez pas d’autorisation. Même si vous exécutez peut-être en tant qu’administrateur local, Windows ne vous permettra pas d’y accéder.
AVERTISSEMENT : Il y a eu des rapports de volumes de serveur corrompus lors de la copie de données sur un serveur Windows Server 2016 avec la déduplication activée. Lorsque vous utilisez le commutateur
/ZB
, le résultat sera un magasin de blocs de dédup saccagé dans les informations de volume du système. Les fichiers copiés ne seront pas lisibles et généreront des erreurs en essayant de les manipuler. Lien Serverfault avec plus d’informations.
Le mode de sauvegarde est un moyen d’accéder aux fichiers sans se soucier des autorisations.
Robocopy utilise le mode de sauvegarde pour utiliser SeBackupPrivilege pour lire les fichiers et le droit d’utilisateur SeRestorePrivilege pour accéder à tous les fichiers dont il a besoin. Cela ignore tout AS qui vous empêcherait normalement d’accéder à ces fichiers.
Les droits d’utilisateur SeBackupPrivilege et SeRestorePrivilege sont normalement attribués aux utilisateurs des groupes Opérateurs de sauvegarde et Administrateurs, mais ils peuvent parfois être supprimés. Le module de sauvegarde élimine ce risque et accorde temporairement à l’utilisateur exécutant robocopy ces droits.
Si vous souhaitez vérifier si votre compte utilisateur a ce droit, vous pouvez exécuter whoami /priv
et les deux droits doivent être affichés.
Filtrage des fichiers et dossiers
La grande majorité des options à votre disposition consiste à exclure les fichiers et les répertoires de différentes manières. J’ai décomposé toutes les façons dont vous pouvez filtrer ou exclure des fichiers et des répertoires en fonction de divers critères.
Par Nom de fichier ou Extension de fichier
Le filtrage des fichiers copiés / déplacés dans un appel robocopy se fait à l’aide de caractères génériques. Vous pouvez utiliser un caractère générique pour filtrer les fichiers correspondant à une chaîne ou une extension de nom de fichier spécifique.
Par exemple, pour copier uniquement des fichiers TXT, vous pouvez spécifier *.txt.
> robocopy C:\src C:\dst *.txt
Si vous souhaitez vous limiter aux fichiers commençant par a, vous pouvez utiliser a *.
> robocopy C:\src C:\dst a*
Y0u peut également fournir plusieurs ensembles de correspondances de noms de fichiers en les séparant par un espace comme indiqué ci-dessous.
> robocopy C:\src C:\dst a* b*
Lorsque vous filtrez par nom de fichier, robocopy vous montrera le filtre dans la sortie.
Par nom de répertoire
Robocopy vous permet de filtrer les éléments non seulement par fichier, mais également par nom de répertoire. En utilisant robocopy /xd
, vous pouvez exclure certains répertoires correspondant à un nom spécifique.
Lorsque vous copiez plusieurs dossiers, utilisez le commutateur /XD
pour exclure les dossiers de l’exécution.
> robocopy C:\src C:\dst /XD "c:\src\exclude"
Par Horodatage de fichier / répertoire
Ci-dessous, vous trouverez toutes les options de robocopie qui excluront les fichiers et les dossiers en fonction de divers attributs d’horodatage.
Commutateur | Explication |
/ DCOPY: T | Horodatage du répertoire de copie |
/ MAXAGE: n | Exclure les fichiers plus anciens que n jours / date |
/ MINAGE:n | Exclure les fichiers plus récents que n jours / date |
/ XO | Si le fichier de destination existe et est de la même date ou plus récent que la source, n’écrasez pas |
/ XN | Si le fichier de destination existe et a la même date ou est plus ancien que la source, n’écrasez pas |
Il existe deux options populaires à choisir lors du filtrage sur des éléments tels que l’horodatage; /XO
et /MAXAGE
.
/XO
vous permet d’exclure des fichiers de la copie uniquement s’ils sont plus récents que la source. En utilisant l’option /XO
, vous pouvez robocopier uniquement les nouveaux fichiers par date d’accès.
> robocopy C:\src C:\dsc /XO
Si vous savez que les fichiers d’âge maximum seront, vous pouvez également utiliser l’option /MAXAGE
. Cela vous permet de spécifier au format AAAMMJJ l’ancienne date qu’un fichier peut avoir avant d’être copié.
> robocopy c:\src c:\dst /S /MAXAGE:20191001
Travaux Robocopy
Vous avez vu que des dizaines d’options s’offrent à vous. Il est facile pour ces options de devenir rapidement lourdes. Heureusement, vous avez une meilleure option que de mémoriser et de vous assurer que toutes ces options sont parfaites à chaque fois.
Les fichiers de tâches Robocopy sont des fichiers texte contenant une option par ligne. Vous utiliserez généralement robocopy pour créer ces fichiers de tâches. Une fois créés, vous pouvez alors utiliser robocopy pour les modifier ou un simple éditeur de texte.
Vous disposez de diverses commandes robocopy qui fonctionnent avec des tâches.
Commutateur | Explication | Comportement par défaut | Commutateur équivalent | Notes |
/ JOB: jobname | Prend les paramètres du fichier de travail nommé | |||
/ ENREGISTRER:nom du travail | Enregistrer les paramètres dans le fichier de travail nommé | |||
/ QUITTER | Quitter après le traitement de la ligne de commande | Utile pour afficher les paramètres | ||
/ NOSD | Aucun répertoire source n’est spécifié | |||
/ NODD | Aucun répertoire de destination n’est spécifié | |||
/ SI | Incluez les fichiers suivants |
Un fichier de travail typique créé avec robocopy a une extension RCJ et ressemble à l’extrait de code ci-dessous. Ce fichier de travail a été créé en exécutant robocopy C:\src D:\dst /save:myjob
. Vous pouvez voir que vous pouvez fournir des commentaires dans le fichier de travail en utilisant ::
qui est la majeure partie de ce fichier.
Sans commentaires, le fichier ne contiendrait qu’une seule option par ligne.
:::: 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 :::
Enregistrer des fichiers de travail
Enregistrer un fichier de travail consiste simplement à ajouter l’option /SAVE:<jobname>
à la fin de votre syntaxe. Remplacez <jobname>
par le nom de la tâche. L’option /SAVE
créera un fichier appelé < jobname >.rcj dans le répertoire où vous avez exécuté robocopy.
> robocopy C:\src C:\dst /SAVE:myjob
Vous devez spécifier /SAVE
comme dernière option. Toutes les options spécifiées après /SAVE
ne seront pas ajoutées au fichier de travail. Notez également que même si un fichier de travail existant existe déjà, robocopy écrasera toujours le fichier existant. Sauvegarde ou contrôle de version de vos fichiers de travail!
Remarque : Si vous essayez d’utiliser l’option
/MT
lors de l’enregistrement dans un fichier de tâches, elle ne sera pas dans le fichier de tâches. Faites-moi savoir si vous avez pu l’inclure.
Utilisation des fichiers de tâches
Une fois qu’un travail est enregistré dans un fichier de tâches, vous pouvez ensuite utiliser l’option /JOB:<jobname>
pour spécifier le fichier de tâches à lire. Robocopy lit tous les paramètres à l’intérieur du fichier de travail. Il s’exécute ensuite comme si vous aviez fourni les options directement sur la ligne de commande.
> robocopy /JOB:myjob
Créer un fichier de travail Sans Exécuter de travail En Utilisant /QUIT
Le but de l’option /QUIT
n’est pas évident. En surface, vous pouvez penser que /QUIT
force une course à quitter. Au lieu de cela, /QUIT
agit plus comme une option pour empêcher un travail de s’exécuter en premier lieu.
Officiellement, l’option /QUIT
« force robocopy à terminer le traitement de la ligne de commande ». Cependant, cela serait mieux expliqué comme la création d’un fichier de travail sans exécuter de travail.
Si vous utilisez l’option /SAVE
, le travail sera également exécuté automatiquement. Il n’y a aucun moyen de créer un fichier de travail sans avoir d’abord exécuté le travail. Vous pouvez créer le fichier de travail RCJ avec un éditeur de texte ou vous pouvez utiliser robocopy do it en ajoutant /QUIT
à la fin.
> robocopy C:\src C:\dst /SAVE:myjob /QUIT
Modification d’un fichier de travail
Étant donné que les fichiers de travail ne sont que des fichiers texte, vous pouvez les modifier avec votre éditeur de texte préféré ou demander à robocopy de le faire pour vous.
Vous pouvez modifier les fichiers de tâches en combinant /JOB
, /SAVE
et /QUIT
.
Par exemple, vous souhaitez peut-être exclure tous les fichiers EXE de votre travail robocopy enregistrés dans un fichier de travail appelé backupfiles.JCJ. Vous avez déjà créé le fichier de travail et ne souhaitez pas écraser le tout. Vous pouvez ajouter la nouvelle option comme ci-dessous:
> robocopy /JOB:backupfiles /XF *.EXE /SAVE:backupfiles /QUIT
En utilisant plusieurs fichiers de tâches
, vous pouvez même combiner l’utilisation de fichiers de tâches. Lorsque vous spécifiez plusieurs fichiers de tâches dans la même exécution, toutes les options utilisées dans cette exécution seront combinées ensemble.
Par exemple, vous avez peut-être une grande liste de fichiers à exclure de votre travail de copie de backupfiles. Ouvrez un éditeur de texte et ajoutez ce qui suit pour créer une exclusion.fichier rcj.
/XF a.exe b.txt c.cer
Vous pouvez ensuite exclure ces fichiers du travail backupfiles comme suit:
> robocopy /JOB:backupfiles /JOB:exclude
Étant donné que le fichier de travail backupfiles d’origine excluait déjà tous les fichiers EXE, la syntaxe de l’exécution ci-dessus serait /XF *.exe a.exe b.txt c.cer
. Robocopy combine toutes les options en une seule.
Modèles Robocopy et en utilisant les options /NOSD et /NODD
Si vous travaillez avec de nombreux fichiers de tâches, vous pouvez créer des fichiers de tâches pour accepter les paramètres. Robocopy vous permet de transmettre des valeurs de la ligne de commande aux tâches lorsqu’elles sont exécutées. Un paramètre n’est pas un terme de robocopie mais il s’intègre bien dans ce scénario.
Vous pouvez créer des tâches robocopy pour accepter des paramètres en ne spécifiant pas de répertoire source ou de destination en utilisant explicitement les options /NOSD
et /NODD
ou simplement en n’incluant pas du tout de répertoire source et de destination.
Pour un exemple simple, créez un fichier de travail sans source ni destination en utilisant la syntaxe ci-dessous. L’intention de ce travail est de copier tous les fichiers TXT et EXE d’une source vers un répertoire de destination.
> robocopy *.txt *.exe /SAVE:backupfiles /QUIT
Seul, ce travail ne fonctionnera jamais car aucun répertoire source ou de destination n’est spécifié.
Lorsque vous créez une tâche sans répertoire source et de destination, le fichier de tâche est automatiquement créé à l’aide des options /NOSD
et /NODD
.
/NOSD /NODD/IF *.txt *.exe/DCOPY:DA/COPY:DAT/R:1000000/W:30
Les options /NOSD
indiquent à robocopy que vous n’avez pas inclus de répertoire source tandis que /NODD
indique que vous n’avez pas inclus de répertoire de destination. Ce fichier de tâches est un « modèle » pour d’autres tâches.
Mais vous pouvez passer des « paramètres » à ce fichier de travail pour fournir les répertoires source et de destination.
Pour utiliser le fichier de travail qui vient d’être créé pour copier des fichiers depuis C:\src à C:\dst, vous pouvez passer ces répertoires directement sur la ligne de commande qui sera ensuite transmise au travail.
> robocopy /JOB:backupfiles C:\src C:\dst
Copie asynchrone (Robocopy/MT)
Par défaut, robocopy ne traite qu’un seul fichier à la fois. Cependant, vous pouvez forcer robocopy à copier plus de fichiers qu’à la fois en utilisant l’option /MT
.
L’option /MT
vous permet de spécifier le nombre de threads que robocopy utilisera pour copier des fichiers. Le maximum est de 128.
Vous pouvez utiliser /MT
comme ceci:
> robocopy C:\src C:\dst /MT:32
J’ai choisi 32 dans ce cas comme référence. Je suggère de commencer à 32 pour voir comment votre ordinateur et votre réseau gèrent les choses et ajustent les threads en conséquence.
Notez que si vous utilisez
/MT
, vous ne pourrez pas utiliser/IPG
ou/EFSRAW
. Pour de meilleures performances, ne publiez pas le journal sur la console. Utilisez plutôt/LOG
.
Planification de Robocopy
Robocopy a plusieurs façons de planifier son exécution.
En utilisant /RH
En utilisant l’option /RH
, vous pouvez indiquer à robocopy de ne s’exécuter que pendant une période spécifique. C’est génial si vous avez une fenêtre de maintenance ou un moment où tout le monde est rentré chez lui pour la journée.
Vous pouvez spécifier une heure de début et une heure de fin au format HHMM-HHMM. Par exemple, pour appeler robocopy mais ne l’autoriser à s’exécuter qu’entre les heures de 17H et 9H telles que définies par l’horloge système, exécutez:
> robocopy C:\src C:\dst /RH:1700-0900
Vous verrez que si vous appelez robocopy en dehors de ces heures, il vous indiquera l’heure actuelle et attendra que l’heure de début s’exécute.
Vous devez vous assurer que les deux heures sont dans un format de 24 heures et ont exactement quatre chiffres. La fenêtre doit être supérieure à deux minutes.
Par défaut, l’utilisation de /RH
vérifiera l’heure de début avant toute l’exécution. Cependant, si vous avez beaucoup de fichiers et que vous pensez que le processus peut durer plus longtemps que cela, vous pouvez utiliser l’option /PF
. /PF
forcera robocopy à vérifier la fenêtre avant chaque fichier.
En utilisant le planificateur de tâches
Le journal de sortie
Robocopy renverra toujours un journal de sortie. C’est à vous de décider si ce journal est affiché via stdout sur la console et / ou redirigé vers un fichier journal.
Vous avez beaucoup d’options lors de l’affichage de la sortie robocopy.
Commutateur | Explication | Comportement par défaut | Commutateur équivalent | Notes |
/ NP | Aucun progrès. Supprime l’affichage des informations de progression. Cela peut être utile lorsque la sortie est redirigée vers un fichier. | |||
/ unicode | Affiche la sortie d’état sous forme de texte unicode | |||
/ LOG: fichier | État de sortie du fichier journal et écrasement | |||
/ UNILOG: fichier | État de sortie dans le fichier journal unicode et écrasement | |||
/ LOG +:file | Statut de sortie au fichier journal et ajout au fichier journal existant | |||
/ UNILOG+: fichier | État de sortie dans le fichier journal unicode et ajout au fichier journal existant | |||
/ TS | Affiche les horodatages du fichier pour chaque fichier traité. | |||
/ FP | Remplace les noms de fichiers simples par des chemins d’accès complets dans la sortie. | |||
/ NS | N’affiche pas la taille des fichiers. | |||
/ NC | Masque la sortie de la classe de fichier « Balises de texte » (Allez ici pour plus d’informations: https://www.uvm.edu/~gcd/2015/04/robocopy-file-classes/) | |||
/ NFL | Masque les noms de fichiers. Les échecs sont toujours enregistrés cependant. Tous les fichiers les fichiers supprimés ou seraient supprimés si /L était omis sont toujours enregistrés | |||
/ NDL | Masque la sortie de la liste des répertoires. Les chemins d’accès complets des fichiers sont affichés pour retrouver plus facilement les fichiers problématiques. | |||
/ TEE | Sortie vers la fenêtre de la console, ainsi que le fichier journal | |||
/ NJH | Pas d’en-tête de travail | |||
/ NJS | Aucun résumé d’emploi | |||
/ OCTETS | Tailles d’impression en octets | |||
/ X | Signale tous les fichiers, pas seulement ceux sélectionnés & copiés | |||
/ V | Produit un journal de sortie détaillé, montrant les fichiers ignorés | |||
/ ETA | Affiche l’heure d’arrivée estimée des fichiers copiés. Consultez l’heure de début de chaque copie de fichier et l’heure estimée d’achèvement en fonction du débit observé des copies précédentes. Les heures sont affichées après le nom du fichier au format HH:MM -> HH:MM (début -> fin). | |||
/ DEBUG | Afficher les informations de volume de débogage |
Limitation des éléments de journal avec /NJS et /NJH
Par défaut, robocopy renvoie deux éléments dans sa sortie, un en-tête de travail et un résumé de travail.
L’en-tête de tâche est l’en-tête ROBOCOPY simple en haut.
Le résumé de la tâche affiche un état récapitulatif de tous les fichiers/dossiers, de la quantité de données transférées et de l’heure à laquelle l’exécution s’est terminée.
Vous pouvez masquer chacun de ces éléments à l’aide de l’option /NJH
pour masquer l’en-tête de la tâche et de l’option /NJS
pour masquer le résumé de la tâche. Vous pouvez inclure l’une de ces options ou les deux ensemble.
Rediriger le journal de sortie vers un fichier
Si vous devez enregistrer le journal de sortie, vous pouvez le rediriger vers un fichier texte et/ ou l’afficher sur la console. Vous pouvez le faire en utilisant des redirecteurs de sortie traditionnels tels que >
, >>
, PowerShell ou l’option /LOG
.
Pour rediriger le journal de sortie vers un fichier à l’aide de l’option /LOG
écrasant tout fichier journal existant, utilisez la syntaxe /LOG:<filepath>
comme ci-dessous. La seule sortie que vous recevrez sur la console est le chemin d’accès au fichier journal.
> robocopy C:\src C:\dst /LOG:c:\file.log Log File : c:\file.log
Si vous souhaitez conserver le contenu d’un fichier journal existant et ajouter des résultats à un fichier, vous pouvez utiliser l’opérateur +
comme indiqué ci-dessous.
> robocopy C:\src C:\dst /LOG+:c:\file.log Log File : c:\file.log
Redirection du journal de sortie vers un fichier et Affichage sur la Console
Si vous souhaitez enregistrer le journal de sortie dans un fichier tout en le voyant également sur la console, vous pouvez utiliser l’option /TEE
. Cette option permet à robocopy d’écrire la sortie dans le fichier journal tout en conservant le comportement par défaut de renvoi de la sortie à la console.
robocopy C:\src C:\dst /LOG+:c:\file.log /TEE
Codes de sortie
Comme tous les autres utilitaires de ligne de commande, robocopy renvoie des codes de sortie en fonction des résultats de l’exécution. Nous souhaitons tous que robocopy sorte toujours avec succès avec un 0
mais cela n’arrive pas toujours.
Ci-dessous, vous trouverez tous les codes de sortie renvoyés par robocopy et leur explication. Tout code de sortie supérieur à sept indique au moins un échec lors de l’exécution.
Code de sortie | Explication |
0 | Aucune action effectuée. La source et la destination sont synchronisées. |
1 | Au moins un fichier a été copié avec succès. |
2 | Des fichiers ou répertoires supplémentaires ont été détectés. Examinez le journal. |
3 | Codes de sortie 2 et 1 combinés. |
4 | Fichiers ou répertoires non appariés trouvés. Examinez le journal. |
5 | Codes de sortie 4 et 1 combinés. |
6 | Codes de sortie 4 et 2 combinés. |
7 | Codes de sortie 4, 1 et 2 combinés. |
8 | Au moins un fichier ou un répertoire n’a pas pu être copié. Réessayez la limite dépassée. Examinez le journal. |
16 | La copie a échoué de manière catastrophique. |
Notez que si vous exécutez robocopy dans un utilitaire tiers, cet utilitaire peut penser que tout code de sortie différent de zéro est un échec. Pour éviter cela, vous pouvez changer le code de sortie en 0 s’il renvoie 1.
Le code de sortie du fichier « extra » de Robocopy est un code de retour courant, ce qui signifie qu’un fichier « extra » se trouve dans le dossier de destination mais pas dans le dossier source. Ce code exclut les extras qui empêcheront toute suppression de la destination.
Modification du code de sortie dans un fichier de commandes
Si vous exécutez robocopy avec un fichier de commandes, vous pouvez trouver la valeur de la variable %ERRORLEVEL%
. S’il renvoie 1, utilisez le mot clé exit
pour quitter le script avec 0.
> (robocopy <options>) ^& IF %ERRORLEVEL% LEQ 1 exit 0
Modification du code de sortie dans un script PowerShell
Si vous exécutez robocopy dans un script PowerShell, vous pouvez appeler robocopy avec Start-Process
en utilisant PassThru
pour renvoyer le processus créé et Wait
pour attendre la fin de robocopy. Vous pouvez ensuite vérifier la propriété ExitCode
pour une valeur de 1. Si le code de sortie est 1, quittez le script PowerShell avec un 0 en utilisant $host.SetShouldExit()
.
$exitCode = (Start-Process -FilePath 'robocopy' -ArgumentList '<option>' -PassThru -Wait).ExitCodeif ($exitCode -eq 1) { $host.SetShouldExit(0)}
Erreurs courantes
Si vous traitez des milliers de fichiers, vous rencontrerez forcément des problèmes. Voici une ventilation des erreurs courantes que j’ai rencontrées
Paramètre invalide d’erreur
Lorsque vous voyez une erreur indiquant un paramètre invalide d’erreur, cela signifie normalement que vous avez essayé de passer des options à robocopy hors séquence d’une manière ou d’une autre. L’erreur robocopy invalid parameter 3 est la plus courante, semble-t-il.
Une raison courante pour laquelle vous recevez cette erreur est lorsque vous spécifiez un répertoire source ou de destination avec des espaces et oubliez de l’entourer de guillemets.
Exemples de Robocopie
Vous pouvez construire vos propres chaînes de robocopie ou vous pouvez prendre ce que les autres ont appris et les utiliser! Dans cette section, je vais couvrir des cas d’utilisation sur la façon d’utiliser robocopy pour accomplir diverses choses.
Trouver la taille du répertoire d’un dossier réseau
Contributeur: northendtrooper (Reddit)
> robocopy "\MACHINE\fileshare" c:\dummy /l /xj /e /nfl /ndl /njh /r:0 /mt:64
Supprimer rapidement le contenu du dossier (en ignorant les autorisations sur les sous-dossiers)
Contributeur: pizzasteveo (Reddit)
> robocopy c:\dummy c:\foldertodelete /MIR
Effectuer des migrations de fichiers volumineux
Contributeur: @MySnozzberries (Twitter)
Le but de cet extrait est de forcer la propriété de tous les fichiers aux administrateurs. Nous ajoutons ensuite un AS explicite pour le groupe Administrateurs pour un contrôle total sur chaque objet de manière récursive, même si nous définissons également l’héritage.
Enfin, nous effectuons une copie robocopy complète avec des DACL vers la destination avec log. Le journal peut ensuite être examiné pour des problèmes d’autorisation supplémentaires ou simplement des verrous de fichiers et une autre synchronisation delta peut être effectuée ultérieurement.
> 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
Force récursivement le groupe Administrateurs en tant que propriétaire de tous les fichiers et répertoires. Il peut y avoir des moyens de contourner cela, mais c’est l’approche la plus lourde et généralement la plus rapide.
> takeown /F .\test /R /A /D Y
Une fois que nous sommes le propriétaire, nous pouvons maintenant forcer un nouvel AS dans la DACL pour chaque objet. Cela confère aux administrateurs un contrôle total avec l’héritage activé et récursivement via le chemin.
Définir cela à la racine avec l’héritage couvrirait l’environnement, mais lorsqu’un partage a le PROPRIÉTAIRE DU CRÉATEUR avec un contrôle total (ce qui est malheureusement même la recommandation de Microsoft pour des choses comme les magasins de profil d’utilisateur de fichiers), l’utilisateur peut désactiver l’héritage ou supprimer ACEs à sa discrétion. Une main lourde est donc généralement la solution la plus rapide.
> icacls .\test /grant "Administrators":(OI)(CI)F /T
Une fois que nous avons modifié les DACL sur la majorité des fichiers, nous essayons de copier les fichiers vers un nouvel emplacement, ce qui est courant pour des choses comme les migrations de partage de fichiers. Pour cela, nous copions récursivement les éléments et utilisons le commutateur /SEC
pour copier également les Données / Attributs / Horodatages / DACL.
Ensuite, nous enregistrons l’opération avec des chemins complets et pour tous les objets (/V
commutateur verbeux) dans un journal, afin que nous puissions corriger les < 5% d’erreurs qui sont généralement liées à la longueur du chemin ou au verrouillage du fichier et obtenir plus de précision.
> robocopy .\test .\test2 /E /SEC /FP /V /LOG:.\temp.log
Il s’agit d’un cadre simple pour gérer une migration de partage de fichiers avec un impact minimal sur l’expérience utilisateur. Il améliore également le contrôle qu’IL détient sur les données. Si un client a une pratique de gouvernance des données solide où la propriété est correctement gérée au niveau d’un dossier enfant, cela devient une discussion plus compliquée, mais la plupart des clients que nous trouvons ont de la chance d’utiliser uniquement l’héritage et les AS basés sur le groupe, c’est donc la situation la plus courante et la solution que nous commençons.
Alternatives à Robocopy
Robocopy est un outil génial, mais il y a tellement d’autres outils similaires qui peuvent être intéressants.
- xxcopy – Un utilitaire de ligne de commande similaire avec des tonnes d’options.
- Applet de commande PowerShell Copy-Item – Pas aussi présenté mais beaucoup plus simple.
- TreeSize – Interface graphique et utilitaire scriptable pour trouver des informations sur les dossiers.
Résumé
Robocopy est un excellent outil pour copier de gros ensembles de fichiers. Que vous fassiez une migration de données, que vous conserviez des dossiers synchronisés ou que vous ayez simplement besoin d’un moyen rapide de copier des fichiers avec précision, robocopy est un excellent choix.