Copier un fichier avec Robocopy en ligne de commande

System administrator terminal running a command line file transfer

Pour tout administrateur système Windows, Robocopy (pour Robust File Copy) est l’équivalent natif du célèbre outil rsync sous Linux. Intégré par défaut depuis Windows Vista et Windows Server 2008, il remplace avantageusement les antiques commandes copy et xcopy en apportant la reprise sur incident, la gestion fine des attributs NTFS et le multi-threading.

Pourtant, beaucoup de techniciens se heurtent à sa syntaxe lorsqu’il s’agit de ne copier qu’un seul fichier précis, car Robocopy fonctionne différemment des commandes de copie traditionnelles.

Comprendre la syntaxe particulière de Robocopy

Contrairement à copy source\fichier.txt destination\, Robocopy exige de dissocier les dossiers du ou des fichiers ciblés. La syntaxe générale s’articule ainsi :

robocopy <dossier_source> <dossier_destination> [fichier(s)] [options]

Les deux premiers arguments doivent impérativement être des répertoires. Si vous souhaitez transférer un fichier isolé, son nom doit être renseigné en troisième position comme filtre de sélection.

Exemple concret : copier un fichier unique

Imaginons que vous souhaitiez transférer le fichier rapport.xlsx situé dans C:\Donnees\Compta vers un partage réseau \\Serveur01\Sauvegardes :

robocopy « C:\Donnees\Compta » « \\Serveur01\Sauvegardes » rapport.xlsx

Si vous devez copier plusieurs fichiers spécifiques ou filtrer par extension, vous pouvez chaîner les noms ou utiliser des caractères génériques :

robocopy « C:\Donnees\Compta » « \\Serveur01\Sauvegardes » rapport.xlsx bilan.pdf *.docx

Cette approche évite d’écrire des scripts complexes et s’intègre parfaitement dans votre arsenal de lignes de commandes utiles sous Windows pour l’automatisation de tâches de maintenance.

Les options indispensables pour fiabiliser la copie

Par défaut, Robocopy tente d’accéder indéfiniment aux fichiers verrouillés avec un million de tentatives et un délai d’attente de trente secondes entre chaque essai. Dans un script batch ou PowerShell, cela peut bloquer l’exécution pendant des heures. Voici les commutateurs à toujours intégrer :

  • /R:2 : limite le nombre de tentatives à deux essais en cas de verrouillage du fichier.
  • /W:5 : réduit le temps d’attente entre deux tentatives à cinq secondes.
  • /COPY:DAT : copie les données (D), les attributs (A) et les horodatages (T) d’origine, garantissant que la date de modification reste intacte.
  • /COPYALL : copie l’intégralité des informations, y compris les listes de contrôle d’accès NTFS (ACL), les informations d’audit et de propriétaire. Idéal pour une migration de serveur de fichiers.
  • /Z : active le mode reprise (restartable mode), permettant de reprendre un gros transfert là où il s’est interrompu lors d’une coupure réseau.
  • /MT:8 : active le transfert multi-thread (jusqu’à 128 threads) pour accélérer considérablement le débit sur des volumes importants.

Une commande optimisée pour le transfert sécurisé d’un fichier lourd sur un réseau distant ressemble donc à ceci :

robocopy « C:\Logs » « D:\Archives » trace.evtx /Z /R:2 /W:3 /NP

Le commutateur /NP (No Progress) désactive le pourcentage de progression dynamique dans la console, ce qui allège la charge processeur et rend les journaux d’exécution beaucoup plus lisibles lors de la génération de logs texte.

Contrôler le résultat

Une fois le transfert effectué, Robocopy affiche un tableau récapitulatif détaillé indiquant le nombre d’éléments copiés, ignorés ou en échec. Avant et après vos transferts volumineux, pensez à vérifier l’espace disque et à afficher la taille des répertoires en ligne de commande afin de vous assurer de la cohérence de vos volumes de données.

Pour les environnements mixtes intégrant des partages Unix ou des architectures de stockage spécifiques, notez que la logique de synchronisation différentielle reste très proche de ce que propose rsync sur Synology ou tout autre serveur Linux.

À lire aussi