15/11/2024

Batch

Miroir d’une arborescence avec Robocopy

I. Présentation

Robocopy est un outil en ligne de commande permettant d’effectuer des tâches de copies de fichiers et de répertoires. Il propose de nombreuses options, dont une option intéressante qui permet de faire un miroir d’une arborescence c’est-à-dire de rendre identique l’arborescence source avec celle de destination. Autrement dit, cela permet de faire une sauvegarde d’un répertoire vers un autre en s’assurant que les deux soient identiques, c’est la raison pour laquelle on parle de « miroir ».

Lors de la première exécution, le miroir doit être construit étant donné que la destination est vide, Robocopy copie donc tout ce qui est contenu dans la source vers le répertoire de destination. Lors des prochaines exécutions, les nouveaux répertoires et fichiers seront copiés, ainsi que tout ce qui est modifiés, et sera supprimé tout ce qui se trouve dans la destination et qui n’est plus dans la source. Toujours dans le but d’avoir deux arborescences identiques.

Dans ce tutoriel, nous allons donc écrire un script Batch qui prend une arborescence source et crée une arborescence de destination qui lui est identique.

Pour rappel, Robocopy n’est pas disponible nativement pour Windows XP mais il est contenu dans le « Windows Server 2003 Resource Kit Tools » disponible sur le site de Microsoft.

II. Informations

  • Source : C:\Documents
  •  Destination : D:\SAV_Documents

Le but est de sauvegarder le répertoire « Documents » de la partition « C » et tout ce qu’il contient, c’est-à-dire l’arborescence complète, dans le répertoire «

SAV_Documents » se situant sur la partition « D ».

 

III. Le script et explications

REM ----------------- #Constantes ------------------
SET FICHIERS=*.*
SET SOURCE=C:\Documents
SET DESTINATION=D:\SAV_Documents
REM ----------- #Sauvegarde Documents ---------------
robocopy "%SOURCE%" "%DESTINATION%" "%FICHIERS%" /MIR
  •  REM : Cette commande permet de faire des remarques dans le script, c’est-à-dire des commentaires sur ce que l’on fait, ce qu’il se passe, etc…
  •  SET FICHIERS=*.* : Permet de définir une variable “FICHIERS” contenant la valeur « *.* », ce qui signifie qu’on copiera tous les fichiers, de tous les types (il n’y a pas de filtre sur le type de fichiers à copier ou non).
  •  SET SOURCE=C:\Documents : Permet de définir une variable « SOURCE » contenant le chemin de l’arborescence source.
  •  SET DESTINATION=D:\SAV_Documents : Permet de définir une variable « DESTINATION » contenant le chemin vers le répertorie où doit être reproduite l’arborescence source.
  •  robocopy "%SOURCE%" "%DESTINATION%" "%FICHIERS%" /MIR :

On utilise la commande Robocopy avec les 3 variables que l’on a définies au préalable c’est-à-dire qu’on indique à Robocopy la source, la destination, et ce que l’on copie. De plus, on indique « /MIR » qui correspond à la fonction de miroir de Robocopy. Sans cette fonction, le miroir ne fonctionnera pas.

Note : Le répertoire de destination doit être créé manuellement. S’il n’existe pas, l’exécution du script échouera.

IV. Génération de journaux

Robocopy propose également de générer des journaux (logs) sur les différentes commandes exécutées. Pour cela, ajoutez la commande ci-dessous dans la partie « Constantes » de notre script :

SET LOG=C:\ROBOCOPY\%DATE:~0,2%%DATE:~3,2%%DATE:~6,4%_%TIME:~0,2%%TIME:~3,2%.log

Cette commande permet d’indiquer le chemin et le nom du fichier de log, qui se trouvera donc dans « C:\ROBOCOPY ». Le nom du fichier de log est composé de la date (sans les slashs) puis de l’heure d’exécution et est au format « log ». Par exemple, si l’on exécute le script le 19/10/2012 à 19:30, le fichier de log s’appellera : 19102012_1930.log

Ensuite, il faut indiquer à Robocopy qu’il doit journaliser ce qu’il fait et dans quel fichier il doit le faire. Pour cela, à la fin de la commande « robocopy » de notre script, ajoutez ceci :

/LOG:"%LOG%"

Si vous souhaitez écrire le résultat de plusieurs commandes Robocopy dans le même fichier de log, indiquez « /LOG: » à la première commande puis « /LOG+: » aux commandes suivantes pour lui dire d’écrire à la suite, sinon il écrasera le fichier à chaque fois.

V. Le code complet

Pour que ce soit clair, voici le code complet du script avec la génération de journaux :

REM ----------------- #Constantes ------------------
SET LOG=C:\ROBOCOPY\%DATE:~0,2%%DATE:~3,2%%DATE:~6,4%_%TIME:~0,2%%TIME:~3,2%.log
SET FICHIERS=*.*
SET SOURCE=C:\Documents
SET DESTINATION=D:\SAV_Documents
REM ----------- #Sauvegarde Documents ---------------
robocopy "%SOURCE%" "%DESTINATION%" "%FICHIERS%" /MIR /LOG:"%LOG%"

En cas de problème, je vous invite à créer un sujet dans le forum.

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

1 commentaire sur “Miroir d’une arborescence avec Robocopy

  • Votre commande permet elle aussi de copier les liens symboliques?

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.