Robocopy est l’un des utilitaires en ligne de commande les plus utilisés pour copier de grandes quantités de données sous Windows. C’est un outil très puissant, mais aussi complexe. Dans ce guide, nous allons vous expliquer en détail cette complexité et vous fournir un tutoriel complet sur l’utilisation de cet outil utile.
Robocopy est un utilitaire en ligne de commande pour Windows qui existe depuis Windows NT. Il remplace l’utilitaire moins polyvalent xcopy. Il vous permet de spécifier un chemin de lecteur ou un chemin de serveur pour copier/déplacer des fichiers à l’invite de commande.
La version actuelle de Robocopy au moment de la rédaction est la version 10.0.18. C’est sur cette version que j’ai effectué mes tests.
Robocopy offre de nombreuses fonctionnalités que vous pouvez exploiter pour effectuer des copies et des déplacements de fichiers efficaces et rapides. Il peut :
- Copier des fichiers sur un réseau avec des capacités de reprise
- Ignorer les points de jonction NTFS qui peuvent entraîner des boucles infinies
- Copier les attributs des fichiers et des répertoires en préservant les horodatages
- Copier les autorisations NTFS, les propriétaires et les informations d’audit
- Copier les horodatages des répertoires
- Copier les fichiers en mode « sauvegarde » pour s’assurer que les fichiers sont copiés même si les droits ont été refusés à l’administrateur
- Réessayer automatiquement
- Synchroniser deux dossiers
- Être suffisamment intelligent pour ignorer les fichiers déjà copiés
- Copier des chemins d’accès dépassant la limite de 256 caractères
- Effectuer des copies asynchrones grâce à sa capacité de multitâche.
- Retourne des codes de sortie normalisés à utiliser dans les scripts.
Comme vous pouvez le voir, il y a beaucoup à copier. Je voulais couvrir tout ce que vous devez savoir sur cet outil pratique.
Référence de syntaxe commune pour Robocopy
Pourquoi un si long article de blog sur un seul utilitaire ? Jetez un œil aux tableaux ci-dessous. Vous avez beaucoup d’options pour copier ou déplacer des fichiers avec robocopy ! Vous trouverez plus d’options dans les sections individuelles.
Ces tableaux ont été construits à partir de la syntaxe d’aide renvoyée par robocopy /?
. Ils ont été subdivisés en sections plus significatives, enrichis au fil du temps et nettoyés pour fournir des informations plus utiles.
Options de source
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/S | Copy subfolders | |||
/E | Copy subfolders including empty subfolders | |||
/COPY:[DATSOU] | Copy options | /COPY:DAT | D=Data, A=Attributes, T=Timestamps S=Security=NTFS ACLs, O=Owner info, U=aUditing info. File Data (D) always includes file Timestamps (T) | |
/SEC | Copy files with SECurity | /COPY:DATS | ||
/DCOPY:T | Copy directory timestamps | |||
/COPYALL | Copy ALL file info | /COPY:DATSOU | This will prevent dehydrating offline files and will instead copy the file’s tag (on emc VNX/Unity systems at least). This is not officially documented! If dehydration is what you need (reason i found this issue), you can’t copy the ACLs along your files. CREDIT: Monsieurx (Reddit) | |
/NOCOPY | Copy NO file info | useful with /PURGE | ||
/A | Copy only files with the Archive attribute set | |||
/M | like /A, but remove Archive attribute from source files | |||
/LEV:n | Only copy the top n LEVels of the source tree | |||
/MAXAGE:n | MAXimum file AGE – exclude files older than n days/date | |||
/MINAGE:n | MINimum file AGE – exclude files newer than n days/date | If n < 1900 then n = no of days, else n = YYYYMMDD date | ||
/FFT | Assume FAT File Times | 2-second date/time granularity. This replaces NTFS timestamps. Seems to be more reliable when transferring over a network. | ||
/256 | Turn off very long path (> 256 characters) support |
Options de destination
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/A+:[RASHCNET] | Set file attribute(s) on destination files + add | |||
/A-:[RASHCNET] | Remove file attribute(s) on destination files | |||
/FAT | Create destination files using 8.3 FAT file names only | |||
/CREATE | Create directory tree structure + zero-length files only | |||
/DST | Compensate for one-hour DST time differences |
Options de copie
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/L | List files only | Don’t copy, timestamp or delete any files | ||
/MOV | Move files | Delete from source after copying | ||
/MOVE | Move files and directories | Delete from source after copying | ||
/sl | Copy file symbolic links instead of the target | |||
/Z | Copy files in restartable mode | Survive a network glitch | ||
/B | Copy files in backup mode | |||
/J | Copy using unbuffered I/O | Recommended for large files | ||
/NOOFFLOAD | Copy files without using the Windows copy offload mechanism | https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831628(v=ws.11) | ||
/EFSRAW | Copy any encrypted files using EFS RAW mode | |||
/TIMFIX | Fix file times on all files, even skipped files | |||
/XO | Exclude older | if destination file exists and is the same date or newer than the source – don’t bother to overwrite it. | ||
/XC | Exclude changed files | |||
/XN | Exclude newer files | |||
/XX | Exclude files present in destination but not source | /XX | ||
/XF file [file]… | Exclude files matching given names/paths/wildcards | |||
/XD dirs [dirs]… | Exclude directories matching given names/paths. | /XF and /XD can be used in combination e.g. ROBOCOPY c:\source d:\dest /XF *.doc *.xls /XD c:\unwanted /S | ||
/IA:[RASHCNETO] | Include files with any of the given attributes | |||
/XA:[RASHCNETO] | Exclude files with any of the given attributes | |||
/IM | Overwrite modified files. This includes the same files with different times. | |||
/IS | Overwrite files even if they are already the same | |||
/IT | Include tweaked files | |||
/XJ | Exclude junction points from source | /XJ | ||
/XJD | Exclude junction points from source directories | |||
/XJF | Exclude junction points from source files | |||
/MAX:n | Exclude files bigger than n bytes | |||
/MIN:n | Exclude files smaller than n bytes | |||
/MAXLAD:n | Exclude files unused since n | |||
/MINLAD:n | Exclude files used since n | If n < 1900 then n = n days, else n = YYYYMMDD date | ||
/MIR | Mirror a directory tree | /PURGE /E | ||
/PURGE | Delete dest files/folders that no longer exist in source | |||
/XL | Exclude files present in source but not destination | |||
/SECFIX | Robocopy /secfix fixes file security on all files, even skipped files. | Specify the type of security information you want to copy by also using one of these options: /COPYALL /COPY:O /COPY:S /COPY:U /SEC | ||
/ZB | Use restartable mode; if access denied use Backup mode |
Options de surveillance
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/R:n | Number of retries on failed copies | /R:1000000 | Always try to set this option. I recommend setting this to 10-20 to not waste time retrying. | |
/W:n | Wait time between retries | /W:30 | Always try to set this option to a lower number to retry more quickly. I suggest 5-10. | |
/REG | Save /R:n and /W:n in the Windows registry as default settings | |||
/RH:hhmm-hhmm | times when new copies can be started | |||
/TBD | Wait for sharenames to be defined | retry error 67 | ||
/PF | Check run hours on a per file (not per pass) basis | |||
/MON:n | Run again when more than n changes seen | |||
/MOT:m | Run again in m minutes, if changed |
Compréhension du comportement de Robocopy
I’ve now completely blew your mind with all of the potential syntax options available to you. Let’s now see all of the different combinations of how we can use this syntax.
I could provide you an enormously long list of robocopy commands with an ever-growing number of switches. But I think it’s better to teach you how to fish. Let’s go over how to put sense out of all of these options.
Robocopy ne copie que 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 copier un seul fichier avec le bon filtrage que vous apprendrez ci-dessous. Pour copier un seul fichier avec robocopy, spécifiez immédiatement le répertoire source et le répertoire de destination, suivi du nom du fichier dans la source.
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 pour savoir quelles options utiliser.
- Allez-vous toujours copier vers 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 seulement quelques mégaoctets ?
- Allez-vous copier des fichiers via un réseau ou localement ?
- … et plus encore.
Si aucun fichier n’existe dans le répertoire de destination, vous ne devriez pas vous soucier des options qui écrasent les fichiers. Si vous ne copiez pas de fichiers via le réseau, ne vous préoccupez pas de ces options. Définissez explicitement les circonstances actuelles et potentielles dans lesquelles votre environnement se trouvera.
Reconnaître les options par défaut
Robocopy utilise de nombreuses options par défaut. Vous pouvez les repérer en consultant 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 le dossier de destination), il a automatiquement utilisé certaines options. Comprendre le comportement par défaut est important.
Référez-vous aux options que vous voyez dans la sortie avec les explications des options ci-dessus et vous comprendrez exactement ce que robocopy fait en interne.

Comprendre ce que les commandes Robocopy peuvent faire
Si vous avez utilisé la commande copy
ou les cmdlets 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 offre la possibilité de personnaliser le comportement autant que vous le souhaitez.
Il est important de savoir que robocopy ne se limite pas uniquement au concept de fichier ou de répertoire. Il prend en charge bien plus que cela et prend en charge pratiquement tout.
A file sitting on a filesystem isn’t just a dumb object with a single purpose. There are many different attributes and things that go with the concept of a file. For example, a file has attributes such as:
- a timestamp (written, modified and accessed)
- ACL NTFS
- un propriétaire
- informations d’audit NTFS
- drapeau caché
- drapeau archivé
Lorsque vous copiez ou déplacez un fichier, vous avez la possibilité de transférer toutes ces informations avec lui, 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 de prendre cela en compte dans les options que vous fournissez à robocopy.
Les bases : réalisation de scénarios WhatIf
Si vous disposez d’un serveur de fichiers volumineux que vous souhaitez migrer et que vous ne souhaitez pas encore prendre de mesures, vous pouvez utiliser robocopy pour afficher 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 des 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). Cela vous donnera une vue d’ensemble de ce que robocopy fera en fonction des options que vous lui avez fournies.

/L
Les bases : copie de fichiers
L’utilisation la plus basique de robocopy consiste à spécifier un répertoire source et un répertoire de destination sans options.
Cette option copiera tous les fichiers (à l’exclusion des sous-dossiers) de C:\src vers C:\dst.
Vous pouvez également copier tout, y compris les sous-dossiers (vides ou non) et les permissions NTFS. C’est, d’après ce que je peux voir, la méthode pour copier littéralement tout ce qui concerne un répertoire de fichiers vers un autre répertoire.
Ci-dessous, je copie tous les 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 grâce à l’option /E
pour inclure tous les sous-dossiers vides et /COPYALL
pour le reste.
Les bases : déplacement de fichiers
Déplacer des fichiers transfère les fichiers d’un répertoire vers un autre, tout comme la copie. La seule différence avec une opération de déplacement est que les fichiers sources sont supprimés après la copie.
Pour supprimer les 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 les sous-dossiers).
Vous pouvez également utiliser /MOVE
pour déplacer tous les fichiers et sous-dossiers.
Les bases : synchronisation de fichiers
Robocopy vous permet de synchroniser deux répertoires. Cela signifie soit s’assurer que tous les fichiers du répertoire de destination sont présents dans le répertoire source et pas plus. /MIR
répliquera les données en copiant tous les fichiers du répertoire source qui ne se trouvent pas dans le répertoire de destinationet supprimera les fichiers du répertoire de destination qui ne se trouvent pas dans le répertoire source. Attention !
Copier des fichiers sur un réseau
Si vous copiez des fichiers via un réseau, il existe quelques options que vous devriez prendre en compte.
Robocopy vous permet de copier des fichiers en mode « redémarrable » en utilisant l’option /Z
. Cela signifie que si une copie de fichier commence et échoue en cours de route, la copie peut recommencer au lieu de ne pas aboutir du tout. L’option /Z
est utile lorsque le flux est interrompu sur un réseau.
Avertissement : Certains ont signalé que l’utilisation de
/Z
réduit les performances de 1/4. Faites-moi part de vos conclusions.
Vous pouvez également utiliser l’option /FFT
. Cette commande est connue pour préserver plus précisément les horodatages des fichiers lors d’un transfert sur un réseau. Cette option utilise les horodatages du système de fichiers FAT au lieu de NTFS.
Utilisation de /IPG
pour contrôler l’écart inter-paquets
Lors de la copie de fichiers sur un réseau, vous pouvez utiliser l’option /IPG
. C’est également connu sous le nom d’option de l’écart inter-paquets. Cette option définit (en millisecondes) la fréquence à laquelle robocopy attendra entre l’envoi de nouveaux paquets.
Toujours utiliser des chemins UNC plutôt que des lettres de lecteur
A reader on Reddit discovered the hard way to not use mapped drives as a destination directory. Instead, always use always use a UNC path. You might run into issues with the 256-character limit if you do. Check out this Microsoft doc for more information.
Mode de sauvegarde Robocopy (Robocopy /Z
)
Robocopy dispose d’une option (/B
) ou d’un mode de 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 normalement un fichier sous Windows et que vous rencontrez un fichier qui nécessite des privilèges administratifs pour y accéder, vous recevez une erreur indiquant que vous n’avez pas la permission. Même si vous exécutez en tant qu’administrateur local, Windows ne vous permettra pas d’y accéder.
AVERTISSEMENT : Des rapports ont signalé des volumes de serveur corrompus lors de la copie de données vers un serveur Windows Server 2016 avec la déduplication activée. Lorsque vous utilisez l’option
/ZB
, le résultat est un magasin de fragments dédupliqués endommagé dans le dossier System Volume Information. Les fichiers copiés ne seront pas lisibles et généreront des erreurs lors de leur manipulation. Lien vers Serverfault avec plus d’informations.
Le mode de sauvegarde est une façon d’accéder aux fichiers sans se soucier des autorisations.
Robocopy utilise le mode de sauvegarde pour utiliser le privilège SeBackupPrivilege pour lire les fichiers et le droit d’utilisateur SeRestorePrivilege pour accéder aux fichiers nécessaires. Cela ignore toutes les ACEs qui empêcheraient 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 parfois ils peuvent ê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 dispose de ces droits, vous pouvez exécuter la commande whoami /priv
et les deux droits devraient s’afficher.
Filtrer les fichiers et les dossiers
La grande majorité des options disponibles vous permettent d’exclure des fichiers et des répertoires de différentes manières. J’ai répertorié toutes les façons dont vous pouvez filtrer ou exclure des fichiers et des répertoires en fonction de différents critères.
Par nom de fichier ou extension de fichier
La filtration des fichiers à copier/déplacer 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 de caractères ou une extension de fichier spécifique.
Par exemple, pour copier uniquement les fichiers TXT, vous pouvez spécifier *.txt.
Si vous souhaitez limiter aux seuls fichiers commençant par a, vous pouvez utiliser a*.
Vous pouvez également fournir plusieurs ensembles de correspondances de noms de fichiers en les séparant par un espace, comme indiqué ci-dessous.
Lorsque vous filtrez par nom de fichier, robocopy vous affiche le filtre dans la sortie.

Par nom de répertoire
Robocopy vous permet de filtrer les éléments non seulement par fichier mais aussi par nom de répertoire. En utilisant la commande robocopy /xd
, vous pouvez exclure certains répertoires correspondant à un nom spécifique.
Lors de la copie de plusieurs dossiers, utilisez l’option /XD
pour exclure des dossiers de l’exécution.
Par horodatage de fichier/répertoire
Vous trouverez ci-dessous toutes les options robocopy qui excluront les fichiers et les dossiers en fonction de divers attributs d’horodatage.
Switch | Explanation |
/DCOPY:T | Copy directory timestamps |
/MAXAGE:n | Exclude files older than n days/date |
/MINAGE:n | Exclude files newer than n days/date |
/XO | If destination file exists and is the same date or newer than the source, don’t overwrite |
/XN | If destination file exists and is the same date or older than the source, don’t overwrite |
Il existe deux options populaires à choisir lors du filtrage des horodatages ; /XO
et /MAXAGE
.
/XO
vous permet d’exclure les fichiers de la copie uniquement s’ils sont plus récents que la source. En utilisant l’option /XO
, vous pouvez robocopy uniquement les nouveaux fichiers par date d’accès.
Si vous connaissez l’âge maximum des fichiers, vous pouvez également utiliser l’option /MAXAGE
. Cela vous permet de spécifier au format AAAAMMJJ la date la plus ancienne qu’un fichier peut avoir avant d’être copié.
Robocopy Jobs
Vous avez vu que des dizaines d’options sont disponibles. Il est facile que ces options deviennent rapidement ingérables. Heureusement, vous avez une meilleure option que de mémoriser et de vérifier toutes ces options à chaque fois.
Les fichiers de tâche Robocopy sont des fichiers texte contenant une option par ligne. Vous utiliserez généralement robocopy pour créer ces fichiers de tâche. Une fois créés, vous pouvez ensuite les modifier soit avec robocopy, soit avec un éditeur de texte simple.
Vous avez diverses commandes robocopy qui fonctionnent avec les tâches.
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/JOB:jobname | Take parameters from the named job file | |||
/SAVE:jobname | Save parameters to the named job file | |||
/QUIT | Quit after processing command line | Useful for viewing parameters | ||
/NOSD | No source directory is specified | |||
/NODD | No destination directory is specified | |||
/IF | Include the following files |
A typical job file created with robocopy has an RCJ extension and looks like the below snippet. This job file was created by running robocopy C:\src D:\dst /save:myjob
. You can see that you can provide comments in the job file using ::
which is most of what this file has.
Sans commentaires, le fichier ne contiendrait qu’une option par ligne.
Enregistrement des fichiers de tâche
L’enregistrement d’un fichier de tâche est aussi simple que d’ajouter l’option /SAVE:<nom_de_la_tâche>
à la fin de votre syntaxe. Remplacez <nom_de_la_tâche>
par le nom de la tâche. L’option /SAVE
créera un fichier appelé <nom_de_la_tâche>.rcj dans le répertoire où vous avez exécuté robocopy.
Vous devez spécifier /SAVE
comme dernière option. Toute option spécifiée après /SAVE
ne sera pas ajoutée au fichier de tâche. Notez également que même si un fichier de tâche existant existe déjà, robocopy l’écrasera toujours. Sauvegardez ou versionnez vos fichiers de tâche !
Note : Si vous essayez d’utiliser l’option
/MT
lors de l’enregistrement dans un fichier de tâche, elle ne sera pas incluse dans le fichier de tâche. Faites-moi savoir si vous avez réussi à l’inclure.
Utilisation des fichiers de tâches
Une fois qu’une tâche est enregistrée dans un fichier de tâche, vous pouvez ensuite utiliser l’option /JOB:<nom de la tâche>
pour spécifier le fichier de tâche à lire. Robocopy lit tous les paramètres à l’intérieur du fichier de tâche. Il s’exécute alors comme si vous aviez fourni les options directement en ligne de commande.
Création d’un fichier de tâche sans exécuter une tâche en utilisant /QUIT
Le but de l’option /QUIT
n’est pas évident. À première vue, vous pourriez penser que /QUIT
force l’arrêt d’une tâche en cours. Au lieu de cela, /QUIT
agit davantage comme une option pour empêcher l’exécution d’une tâche en premier lieu.
Officiellement, l’option /QUIT
« force robocopy à terminer le traitement de la ligne de commande ». Cependant, il serait mieux expliqué comme la création d’un fichier de tâche sans exécuter de tâche.
Si vous utilisez l’option /SAVE
, cela exécutera également automatiquement la tâche. Il n’y a aucun moyen de créer un fichier de tâche sans exécuter d’abord la tâche. Vous pouvez créer le fichier de tâche RCJ avec un éditeur de texte ou vous pouvez utiliser robocopy en ajoutant /QUIT
à la fin.
Modification d’un fichier de tâche
Étant donné que les fichiers de tâches sont simplement des fichiers texte, vous pouvez les modifier avec votre éditeur de texte préféré ou vous pouvez demander à robocopy de le faire pour vous.
Vous pouvez modifier les fichiers de tâches en utilisant une combinaison des options /JOB
, /SAVE
et /QUIT
.
Par exemple, peut-être souhaitez-vous exclure tous les fichiers EXE de votre tâche robocopy enregistrée dans un fichier de tâche appelé backupfiles.rcj. Vous avez déjà créé le fichier de tâche et ne voulez pas écraser le fichier entier. Vous pouvez ajouter la nouvelle option comme suit:
Utilisation de plusieurs fichiers de travail
Vous pouvez même combiner l’utilisation de plusieurs fichiers de travail. Lorsque vous spécifiez plusieurs fichiers de travail lors de la même exécution, toutes les options utilisées dans cette exécution seront combinées ensemble.
Par exemple, peut-être avez-vous une longue liste de fichiers à exclure de votre tâche de copie de sauvegarde backupfiles. Ouvrez un éditeur de texte et ajoutez ce qui suit pour créer un fichier exclude.rcj.
Vous pouvez ensuite exclure ces fichiers de la tâche backupfiles comme ceci:
Puisque le fichier de tâche 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 utilisation des options /NOSD
et /NODD
Si vous travaillez avec de nombreux fichiers de travail, vous pouvez créer des fichiers de travail pour accepter des paramètres. Robocopy vous permet de transmettre des valeurs depuis la ligne de commande vers les tâches lorsqu’elles sont exécutées. Un paramètre n’est pas un terme robocopy, mais il s’adapte bien à 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, soit en utilisant explicitement les options /NOSD
et /NODD
, soit en n’incluant tout simplement aucun répertoire source et destination.
Pour un exemple simple, créez un fichier de travail sans répertoire source ou destination en utilisant la syntaxe ci-dessous. L’intention de cette tâche est de copier tous les fichiers TXT et EXE d’une source vers un répertoire de destination.
À lui seul, ce fichier de travail ne fonctionnera jamais car aucun répertoire source ou destination n’est spécifié.
Lorsque vous créez un travail sans répertoire source et destination, le fichier de travail est automatiquement créé en utilisant les options /NOSD
et /NODD
.
L’option /NOSD
indique à 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 travail est un « modèle » pour d’autres travaux.
Mais vous pouvez passer des « paramètres » à ce fichier de travail pour fournir les répertoires source et destination.
Pour utiliser le fichier de travail que vous venez de créer pour copier des fichiers de C:\src à C:\dst, vous pouvez passer ces répertoires directement en ligne de commande, qui seront ensuite transmis au travail.
Copie asynchrone (Robocopy /MT
)
Par défaut, robocopy ne traite qu’un fichier à la fois. Cependant, vous pouvez forcer robocopy à copier plusieurs fichiers à la fois en utilisant l’option /MT
.
L’option /MT
vous permet de spécifier le nombre de threads que robocopy utilisera pour copier les fichiers. Le maximum est de 128.
Vous pouvez utiliser /MT
comme ceci:
I’ve chosen 32 in this case as a baseline. I suggest starting at 32 to see how your computer and network handle things and adjust the threads accordingly.
Notez que si vous utilisez
/MT
, vous ne pourrez pas utiliser/IPG
ou/EFSRAW
. Pour de meilleures performances, n’affichez pas le journal sur la console. Utilisez plutôt/LOG
.
Planification de Robocopy
Robocopy offre plusieurs façons de planifier son exécution.
En utilisant /RH
En utilisant l’option /RH
, vous pouvez indiquer à robocopy de s’exécuter uniquement pendant une période spécifique. C’est idéal si vous disposez d’une fenêtre de maintenance ou d’un moment où tout le monde est parti 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 exécuter robocopy mais lui permettre de s’exécuter uniquement entre 17h et 9h, tel que défini par l’horloge système, exécutez :
Vous verrez que si vous appelez robocopy en dehors de ces heures, il vous indiquera l’heure actuelle et attendra l’heure de début pour s’exécuter.

Vous devez vous assurer que les deux heures sont au format 24 heures et comportent exactement quatre chiffres. La fenêtre doit être supérieure à deux minutes.
Par défaut, en utilisant /RH
, robocopy vérifiera l’heure de début avant l’exécution complète. Cependant, si vous avez beaucoup de fichiers et que vous pensez que le processus pourrait durer plus longtemps, vous pouvez utiliser l’option /PF
. /PF
forcera robocopy à vérifier la fenêtre avant chaque fichier.
Utilisation du planificateur de tâches
Le journal de sortie
Robocopy renverra toujours un journal de sortie. Que ce journal soit affiché via stdout sur la console et/ou redirigé vers un fichier journal vous appartient.
Vous avez de nombreuses options pour afficher la sortie de robocopy.
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/NP | No progress. Suppresses the display of progress information. This can be useful when output is redirected to a file. | |||
/unicode | Display the status output as unicode text | |||
/LOG:file | Output status to log file and overwrite | |||
/UNILOG:file | Output status to unicode log file and overwrite | |||
/LOG+:file | Output status to log file and append to existing log file | |||
/UNILOG+:file | Output status to unicode log file and append to existing log file | |||
/TS | Displays the file timestamps for every file processed. | |||
/FP | Replaces simple file names with full file pathnames in the output. | |||
/NS | Does not show file sizes. | |||
/NC | Hides output the file class “Text Tags” (Go here for more information: https://www.uvm.edu/~gcd/2015/04/robocopy-file-classes/) | |||
/NFL | Hides file names. Failures are still logged though. Any files files deleted or would be deleted if /L was omitted are always logged | |||
/NDL | Hides output of the directory listing. Full file pathnames are output to more easily track down problematic files. | |||
/TEE | Output to console window, as well as the log file | |||
/NJH | No job header | |||
/NJS | No job summary | |||
/BYTES | Print sizes as bytes | |||
/X | Report all files, not just those selected & copied | |||
/V | Produce verbose output log, showing skipped files | |||
/ETA | Show estimated time of arrival of copied files. See the start time of each file copy and the estimated time of completion based on the observed throughput of previous copies. Times are displayed after the file name in the format HH:MM – > HH:MM (start – > finish). | |||
/DEBUG | Show debug volume information |
Limitez les éléments du journal avec les options /NJS
et /NJH
Par défaut, robocopy renvoie deux éléments dans sa sortie, un en-tête de tâche et un résumé de tâche.
L’en-tête de tâche est l’en-tête ROBOCOPY simple en haut.

Le résumé de l’emploi affiche l’état récapitulatif de tous les fichiers/dossiers, la quantité de données transférées et l’heure de fin de l’exécution.

Vous pouvez masquer chacun de ces éléments en utilisant l’option /NJH
pour masquer l’en-tête de l’emploi et l’option /NJS
pour masquer le résumé de l’emploi. Vous pouvez inclure l’une ou l’autre de ces options ou les deux ensemble.

Redirection du 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 les redirigeurs de sortie traditionnels tels que >
, >>
, PowerShell ou l’option /LOG
.
Pour rediriger le journal de sortie vers un fichier en écrasant tout fichier journal existant, utilisez la syntaxe /LOG:<chemin du fichier>
comme indiqué ci-dessous. La seule sortie que vous recevrez sur la console est le chemin vers le fichier journal.
Si vous souhaitez conserver le contenu d’un fichier journal existant et ajouter les résultats à un fichier, vous pouvez utiliser l’opérateur +
comme indiqué ci-dessous.
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 visualisant 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 renvoyer la sortie à la console.
Codes de sortie
Comme tous les autres utilitaires en ligne de commande, robocopy renvoie des codes de sortie en fonction des résultats de l’exécution. Nous espérons tous que robocopy se terminera toujours avec succès avec un code 0
, mais cela n’arrive pas toujours.
Ci-dessous, vous trouverez tous les codes de sortie que renvoie robocopy et leur explication. Tout code de sortie supérieur à sept indique au moins une défaillance lors de l’exécution.
Exit Code | Explanation |
0 | No action performed. Source and destination are synchronized. |
1 | At least one file was copied successfully. |
2 | Extra files or directories were detected. Examine log. |
3 | Exit codes 2 and 1 combined. |
4 | Mismatched files or directories found. Examine log. |
5 | Exit codes 4 and 1 combined. |
6 | Exit codes 4 and 2 combined. |
7 | Exit codes 4, 1 and 2 combined. |
8 | At least one file or directory could not be copied. Retry limit exceeeded. Examine log. |
16 | Copy failed catastrophically. |
Notez que si vous exécutez robocopy dans un utilitaire tiers, cet utilitaire peut considérer tout code de sortie différent de zéro comme une défaillance. Pour éviter cela, vous pouvez modifier le code de sortie en 0 s’il renvoie 1.
Le code de sortie « extra » de Robocopy est un code de retour courant qui signifie qu’un fichier « extra » se trouve dans le dossier de destination mais pas dans le dossier source. Ce code exclut les fichiers supplémentaires qui empêcheront toute suppression depuis la destination.
Modification du code de sortie dans un fichier batch
Si vous exécutez robocopy avec un fichier batch, vous pouvez trouver la valeur de la variable %ERRORLEVEL%
. S’il renvoie 1, utilisez le mot-clé exit
pour quitter le script avec 0.
Modification du code de sortie dans un script PowerShell
Si vous exécutez robocopy dans un script PowerShell, vous pouvez invoquer robocopy avec Start-Process
en utilisant PassThru
pour renvoyer le processus créé et Wait
pour attendre que robocopy se termine. 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 0 en utilisant $host.SetShouldExit()
.
Erreurs courantes
Si vous traitez des milliers de fichiers, vous êtes susceptible de rencontrer certains problèmes. Voici un aperçu des erreurs courantes que j’ai rencontrées
Erreur Paramètre invalide
Lorsque vous voyez une erreur indiquant erreur paramètre invalide, cela signifie généralement que vous avez essayé de passer des options à robocopy de manière incorrecte. L’erreur robocopy paramètre invalide 3 est la plus courante, semble-t-il.
A common reason you’d receive this error is when you specify a source or destination directory with spaces and forget to surround it with quotes.
Exemples de robocopy
Vous pouvez créer vos propres chaînes de robocopy ou utiliser ce que d’autres ont appris ! Dans cette section, je vais couvrir des cas d’utilisation sur la façon d’utiliser robocopy pour accomplir différentes choses.
Trouver la taille d’un dossier sur un réseau
Contributeur : northendtroooper (Reddit)
Supprimer rapidement le contenu d’un dossier (en ignorant les autorisations des sous-dossiers)
Contributeur : pizzasteveo (Reddit)
Réaliser des migrations de fichiers volumineux
Contributeur : @MySnozzberries (Twitter)
L’objectif de cet extrait de code est de forcer la propriété de tous les fichiers à revenir aux Administrateurs. Nous ajoutons ensuite un ACE explicite pour le groupe Administrateurs avec un contrôle total sur chaque objet de manière récursive, même si nous configurons également l’héritage.
Enfin, nous effectuons une copie complète de robocopy avec les DACL vers la destination avec un journal. Le journal peut ensuite être examiné pour d’autres problèmes de permissions ou simplement des verrous de fichiers, et une autre synchronisation delta peut être effectuée ultérieurement.
Récursivement, forcer le groupe Administrateurs comme 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 radicale et généralement la plus rapide.
Une fois que nous sommes propriétaires, nous pouvons maintenant forcer une nouvelle ACE dans le DACL pour chaque objet. Cela accorde aux Administrateurs un contrôle total avec l’héritage activé et de manière récursive dans le chemin.
En définissant cela à la racine avec l’héritage, nous couvrons l’environnement, mais lorsque un partage a CRÉATEUR PROPRIÉTAIRE avec Contrôle total (ce qui est malheureusement même la recommandation de Microsoft pour des choses comme les profils d’utilisateurs de fichiers), l’utilisateur peut désactiver l’héritage ou supprimer les ACE à sa discrétion. Donc une approche radicale est généralement la solution la plus rapide.
Une fois que nous avons modifié les DACLs sur la majorité des fichiers, nous essayons de copier les fichiers vers un nouvel emplacement, une pratique courante pour les migrations de partage de fichiers. Pour cela, nous copions les éléments de manière récursive et utilisons l’option /SEC
pour également copier les Données/Attributs/ Horodatages/ DACLs.
Ensuite, nous enregistrons l’opération avec les chemins complets et pour tous les objets (option de verbeux /V
) dans un journal, afin de pouvoir remédier aux <5% d’erreurs qui sont généralement liées à la longueur du chemin ou au verrouillage des fichiers et d’obtenir plus de granularité.
C’est un cadre simple pour gérer une migration de partage de fichiers avec un impact minimal sur l’expérience utilisateur. Cela améliore également le contrôle que l’informatique exerce sur les données. Si un client dispose d’une pratique solide de gouvernance des données où la propriété est correctement gérée au niveau des sous-dossiers, cela devient une discussion plus compliquée, mais la plupart des clients que nous rencontrons ont la chance d’utiliser uniquement l’héritage et les ACE basés sur les groupes, c’est donc la situation la plus courante et le point de départ de la résolution.
Alternatives à Robocopy
Robocopy est un outil génial, mais il existe de nombreux autres outils similaires qui pourraient vous intéresser.
- xxcopy – Une utilitaire en ligne de commande similaire avec une tonne d’options.
- Copy-Item PowerShell cmdlet – Moins complet mais beaucoup plus simple.
- TreeSize – Utilitaire avec interface graphique et possibilité de script pour trouver des informations sur les dossiers.
Résumé
Robocopy est un excellent outil pour copier de grands ensembles de fichiers. Que vous effectuiez une migration de données, que vous gardiez 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.