Copie de fichiers robuste pour Windows
RoboCopy est un utilitaire en ligne de commande pour la réplication de dossiers. Il fait partie des logiciels installés par défaut avec Windows depuis la version Vista.
RoboCopy est comparable à la commande XCOPY mais possède plus d'options et offrent donc plus de possibilités pour la configuration des scripts de sauvegarde.
RoboCopy est aussi nettement plus rapide que XCopy pour la recherche des fichiers à copier : Lors des sauvegardes, on ne sauve souvent que les fichiers qui ont été modifiés depuis la sauvegarde précédente. La recherche des fichiers modifiés nécessite la comparaison de nombreux fichiers répartis dans de nombreux dossiers et sous-dossiers.
Les copies faites avec RoboCopy peuvent prendre en compte les attributs et les informations d'appartenance des fichiers.
Robocopy est capable de reprendre une copie momentanément interrompue par une défectuosité des transmissions sur le réseau. En cas d'échec, le nombre de tentatives ou le délai avant l'abandon de cette copie peut être configuré avant d'autoriser le passage au fichier suivant.
Le fichier pdf que voici est une adaptation commentée de l'aide obtenue par le commande ROBOCOPY / ?
Les options de RoboCopy sont trop nombreuses pour pouvoir deviner facilement ce qu'elles donnent comme résultat. La commande RoboCopy ne fonctionne bien que si elle configurée dans un fichier de commande testé avec soin.
Mise en garde !
L'auteur de ces lignes ne peut être tenu responsable de fausses manœuvres qui résulteraient de l'utilisation des exemples qui suivent. Ces commandes qui copient des dossiers et des fichiers en grandes quantités sont dangereuses si elles ne sont pas programmées avec prudence.
Imaginons un script destiné à sauver un dossier et l'ensemble des fichiers et autres sous-dossiers qu'il contient sur une clé USB.
But du script
Le dossier à copier est le dossier C:\Projets
On vérifiera que la clé contient déjà à sa racine un dossier de même nom pour
éviter de copier le dossier Projet sur n'importe quelle clé.
Imaginons par exemple qu'il y ait deux clés branchées sur le PC.
Elles pourraient prendre les noms de volume E : et F :
Il faut pouvoir déterminer laquelle est celle qui sert de backup.
Réalisation
Le script, dans un premier temps, teste l'existence du dossier Projets sur
les clés qui sont éventuellement branchées sur l'ordinateur.
Le résultat de ce test est noté dans la variable Clef.
En cas d'échec le script affiche un message d'erreur et ne fait plus rien
d'autre.
Sinon, voici le détail des arguments et des options choisies :
C:\%Dossier% | Représente le nom du dossier à sauver. La variable Dossier est définie une fois pour toute au début du script. Cela permettra d'adapter rapidement ce script à d'autres dossiers. |
%Clef%\%Dossier% | Est le chemin du dossier de destination |
/E | Copie des sous-dossiers même vides |
/R:1 | En cas d'échec ne faire qu'un seul nouvel essai |
/W:1 | En cas d'échec attendre une seconde pas plus. Cela laissera le temps de voir les messages d'erreur à l'écran |
/XA:S | Exclure les fichiers système (les fichiers Thumbs.db par exemple) |
/XF *.tmp *.bak | Exclure les fichiers de type .tmp et .bak (fichiers considérés comme sans intérêt) |
/TEE | Exclure les fichiers anciens qui n'ont pas été modifiés depuis la dernière sauvegarde. |
/LOG:%dossier%.log | Redirection vers un fichier journal dont le nom est composé à partir du nom du dossier sauvé. |
@Echo Off Echo Sauvegarde d'un dossier du PC sur une clef USB Echo La clef USB contient deja un dossier de meme nom Echo On ne copie que fichiers modifies depuis la derniere sauvegarde Echo. Set Dossier=Projets Set Clef=Inconnue If exist E:%Dossier% set Clef=E: If exist F:%Dossier% set Clef=F: If exist G:%Dossier% set Clef=G: If %Clef%==Inconnue ( Echo La clef USB n'a pas ete trouvee Goto :Fin ) RoboCopy C:\%Dossier% %Clef%\%Dossier% /E /R:1 /W:1 /XA:S /XF¨*.tmp *.bak /XO /TEE /LOG:%Dossier%.log :Fin Pause
But du script
Ce script est destiné à synchroniser les sous-dossiers "Cours" de dossiers partagés qui sont en principe identiques sur un PC de bureau appelé ici "DeskTop" et un Pc portable appelé ici "LapTop". L'utilisateur travaille généralement sur son PC de bureau mais il fait aussi des modifications sur son ordinateur portable quand il est en déplacement. Le but de la synchronisation est d'avoir un script qui va faire la mise à jour automatique d'un PC vers l'autre. La synchronisation se fait en écrasant les fichiers les plus anciens avec les fichiers les plus récents.
Réalisation
La synchronisation est faite par deux commandes successives : la première du PC de bureau vers le PC portable et la seconde dans l'autre sens. L'option /XO limite les copies aux fichiers qui ont été modifiés.
Le script commence par tester les noms des ordinateurs. On évite de cette manière qu'il ne soit lancé sur des ordinateurs qui ne seraient pas les bons.
L'utilisation de ce script demande d'autres précautions :
C'est par prudence aussi que les options /MIR ou /PURGE ne sont pas prises.
If /I %COMPUTERNAME% NEQ LapTop ( If /I %COMPUTERNAME% NEQ DeskTop ( Echo Ce script n'est pas prevu pour tourner sur le PC : %COMPUTERNAME% Goto :Fin ) ) RoboCopy \\DeskTop\Partage\Cours \\LapTop\Partage\Cours /E /XA:S /XO /TEE /LOG:Sync_Cours.log RoboCopy \\LapTop\Partage\Cours \\DeskTop\Partage\Cours /E /XA:S /XO /TEE /LOG+:Sync_Cours.log :Fin