# Robocopy

Robocopy, ou "Robust File Copy", est une commande de réplication de répertoires en ligne de commande. Elle faisait initialement partie du Windows Resource Kit à partir de la version 4.0 de Windows NT, et elle a été ajoutée aux commandes standard de Windows Vista, Windows 7, Windows 8, Windows 10 et Windows Server 2008. La commande s’appelle robocopy.

## Fonctionnalités

Robocopy est apprécié pour ses fonctionnalités largement supérieures à celles des commandes internes copy et xcopy de Windows, en particulier :
* Une tolérance à la perte du lien réseau et reprise de la copie une fois ce lien rétabli (les fichiers incomplets sont datés au 1er janvier 1980 et contiennent une information de reprise, de sorte que Robocopy sache où reprendre la copie).
* La préservation des attributs de fichier et métadonnées temporelles, du créateur propriétaire, des ACL NTFS et des informations d’audit en plus du contenu brut des fichiers grâce à des options en ligne de commande (/COPYALL ou /COPY:). Les versions plus récentes sont également capables de préserver les métadonnées temporelles des répertoires (/DCOPY:T).
* La possibilité de garantir un « droit de sauvegarde » Windows NT (/B) ; de sorte qu’un administrateur puisse aussi copier les fichiers dont la lecture lui est normalement refusée.
* Une copie persistante, avec la possibilité de préciser le nombre de nouvelles tentatives à opérer sur un fichier qui ne peut pas être ouvert.
* Un mode « miroir » qui permet de copier et, de manière optionnelle, de supprimer les fichiers de l’emplacement de destination s’ils n’existent pas ou plus dans l’emplacement source.
* La capacité de ‘sauter’ les fichiers existant déjà dans l’emplacement destination avec la même taille et les mêmes métadonnées (copie différentielle).
* Un indicateur de progression dans l’invite de commandes.
* La possibilité de copier des fichiers et des répertoires dont les noms excèdent les 256 caractères (jusqu’à 32 000 caractères de limite théorique) sans erreur.
* Des copies effectuées en parallèle (multithread, sous Windows 7 uniquement).
* Le support de codes de retour pour la programmation de fichiers batch.
La limitation principale de Robocopy est de ne pas prendre en charge les fichiers ouverts. Le mode appelé mode de sauvegarde est parfois interprété comme la capacité d’ouvrir les fichiers déjà ouverts, à tort. Ce mode de sauvegarde est un droit d’administration spécial qui permet à Robocopy de contourner les paramètres de droits d’accès (en l’occurrence, les ACL de NTFS) pour la fabrication de backups.
Par ailleurs, la version d’origine de Robocopy n’était pas capable de recopier à nouveau les attributs de sécurité des fichiers déjà copiés et dont ces attributs avaient changé après la première copie. Ce comportement a été corrigé sur les versions de Robocopy pour Windows 2008 et Windows Vista, mais cela a pour conséquence que Robocopy n’a pas exactement le même comportement sur toutes les plates-formes.
Robocopy ne peut pas exclure les fichiers spécifiés avec des caractères génériques et un chemin de répertoire. Par exemple, /XF images\*.jpg provoquera une erreur.
Robocopy ne permet pas non plus d’exclure des répertoires spécifiés par un chemin qui commence à la racine. Par exemple, /XD Musique exclut à la fois les répertoires \Musique et \Utilisateurs\Nom\Musique alors que /XD \Musique n’exclut aucun répertoire. Par contre on peut spécifier le chemin complet, par exemple /XD C:\Dossier\Musique exclura ce dossier Musique mais gardera les autres comme C:\Dossier\Autre\Musique

## Scénarios typiques d’utilisation

Copier le contenu du répertoire A dans le répertoire B (y compris les attributs et les métadonnées temporelles), de manière récursive et en copiant aussi les répertoires vides (/E):
Copier le répertoire A de manière récursive (/E), et toutes les métadonnées de fichiers (/COPYALL, équivalent à /COPY:DATSOU, où D=Data, A=Attributes, T=Timestamps, S=Security=ACL NTFS, O=Owner info, U=aUditing info), sans faire de nouvel essai sur les fichiers verrouillés (/R:0) (par défaut, le nombre d’essais sur les copies en échec est de 1 million), en préservant les métadonnées temporelles des répertoires (/DCOPY:T – requiert une version XP026 ou ultérieure):
Créer un miroir de A dans B, en supprimant les fichiers de B qui ne sont pas présents dans A (/MIR), et copier les fichiers en mode redémarrable (/Z) au cas où la connexion réseau serait perdue :
Il doit être précisé que l’utilisation de l’option /Z provoque un ralentissement notable de la copie.

## Un copieur de répertoires, pas de fichiers

La syntaxe de Robocopy est assez différente des commandes standard de copie, dans la mesure où elle n’accepte que des noms ou des chemins de répertoire comme emplacements source et destination. Les noms de fichiers et les caractères génériques (comme « *.* ») sont rejetés aussi bien pour la source que pour la destination. Des fichiers peuvent être spécifiés ou exclus grâce à l’argument optionnel de filtrage filespec. Cet argument de filtrage ne peut faire référence qu’à des noms de fichiers se trouvant dans les répertoires déjà spécifiés comme source de la copie ; des chemins de fichiers complets ne sont pas acceptés.
Par exemple, pour copier le fichier totote.txt du répertoire c:\marc au répertoire c:\sophie, on peut utiliser la commande suivante :

## Consommation de bande passante

L’option « délai inter-paquet (en) » (IPG) de Robocopy offre un certain contrôle de la bande passante utilisée lors d’une session réseau. En théorie, la formule ci-dessous indique le délai (D, en millisecondes) nécessaire pour simuler une bande passante données (B$_D$, en kilobits par seconde), sur un réseau disposant d’une bande passante de B$_A$ kb/s :
$D={B_{A}-B_{D} \over B_{A}\times B_{D}}\times 512\times 1000$
Cependant, dans les faits, quelques essais sont généralement nécessaires pour trouver un délai approprié, qui corresponde à la nature et au volume du trafic réseau existant. Cependant, la technique proposée par l’option IPG n’offre pas un contrôle aussi fin que d’autres techniques de gestion de la consommation de bande passante, comme BITS (utilisé par Windows Update et BranchCache).

## Interface graphique

Même si Robocopy est en soi un outil en ligne de commande, Microsoft TechNet lui a adjoint une interface graphique. Celle-ci requiert l’installation du framework .NET 2.0 (40 Mo), si celui-ci n’est pas déjà installé. L’interface graphique Microsoft pour Robocopy inclut la version XP026 de Robocopy (version pour Vista). Lorsqu’elle est téléchargée à partir du lien TechNet ci-dessous, cette version se présente sous "Microsoft Robocopy GUI 3.1.2."
Il existe d’autres interfaces graphiques non-Microsoft pour Robocopy :
* "WinRoboCopy" (dernière version : 1.3.5953, datant du 19 avril 2016).
* "Easy RoboCopy" (dernière version : 1.0.13, datant du 11 janvier 2012).
* "Robocopy GUI" (4 février 2010).

## Versions

| Version du produit | Version de fichier | Année | Origine | Autre |
| 1.70 | - | 1997 | Windows NT Resource Kit | |
| 1.71 | 4.0.1.71 | 1997 | Windows NT Resource Kit | |
| 1.95 | 4.0.1.95 | 1999 | Windows 2000 Resource Kit | |
| 1.96 | 4.0.1.96 | 1999 | Windows 2000 Resource Kit | (c) 1995-1997 |
| XP010 | 5.1.1.1010 | 2003 | Windows 2003 Resource Kit | |
| XP026 | 5.1.2600.26 | 2005 | Téléchargé avec Robocopy GUI v.3.1.2 | |
| XP027 | 5.1.10.1027 | 2008 | Fourni avec Windows Vista, Server 2008 et suivants | (c) 1995-2004 |
| 6.1 | 6.1.7601 | 2009 | Fourni avec Windows 7 | (c) 2009 |
| 6.2 | 6.2.9200 | 2012 | Fourni avec Windows 8 | (c) 2012 |
| 10.0.14393.0 | 10.0.14393.0 | 2016 | Fourni avec Windows 10 | |