Fichier batch pour automatiser la copie de sécurité sur DropBox

Lorsque vous développez un site Web, il importe de copier régulièrement votre code sur un autre support afin d'éviter de tout perdre en cas de bris de disque, de fichier corrompu ou autre catastrophe.

Vous pouvez effectuer la copie sur un disque dur externe (encore faut-il l'acheter), sur une clé USB (risqué...) ou dans le cloud. C'est cette dernière option qui a été retenue ici.

▼Publicité


Mise à jour

J'ai ajusté mon script afin que l'année, le mois et le jour soient toujours correctement initialisés peu importe les configurations du système.

Voici un petit fichier batch qui s'occupe de :

  • Créer un dossier dans DropBox dont le nom se termine par la date du jour.
  • Y copier tous les fichier et les sous-dossiers d'un dossier donné.
  • Dans le cas d'une BD MySQL, générer un script SQL qui sera également copié dans le dossier.

Ce que vous avez à faire pour l'utiliser :

  • Installez DropBox sur votre poste de travail (Google Drive ou tout autre espace de stockage synchronisé sur le cloud fera aussi l'affaire).
  • Téléchargez le fichier CopierDossierDansDropBox.txt
  • Renommez le fichier pour que son extension soit .bat
  • Entrez les informations désirées dans la section configuration.
  • Créez un raccourci sur le bureau.
  • Cliquez sur le raccourci à la fin d'une journée de travail ou créez une tâche automatisée dans le gestionnaire de tâches Windows.

Pour plus de commodité, le code du fichier .bat est transcrit ici.

Note : pour que les accents présents dans les echo soient correctement affichés, le fichier doit être encodé au format OEM 720 (dans Notepad++ : Encodage / Codage de caractères / Arabe / OEM 720).

Fichier batch

@ECHO OFF

REM Copie un dossier et ses sous-dossiers dans DropBox (ou autre dossier synchronisé sur un serveur)

REM en ajoutant la date du jour au dossier principal

REM Crée également un script SQL de la base de données MySQL et le copie dans le même dossier dans DropBox

REM Note : Pour que les accents présents dans les echo s'affichent correctement, utiliser l'encodage OEM 720.

REM Note : Si des noms de dossiers contiennent des caractères accentués, utilisez l'encodage ANSI

REM        et ajoutez l'instruction CHCP 1252.

REM Programmé par Christiane Lagacé : http://christianelagace.com

REM Le 26 mars 2013

REM Ajusté par Christiane Lagacé

REM Le 17 octobre 2015

REM Modifications : Toutes les configurations sont maintenant dans des variables

REM *************************

REM ***** Configuration *****

REM *************************

REM ***** VOUS DEVEZ REMPLIR CETTE SECTION *****

REM Nom du dossier contenant le projet à sauvegarder (ex : monprojet)

set dossierSource=monprojet

REM Chemin pour accéder à ce dossier. Placer entre guillemets s'il contient des espaces 

REM (ex : "C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb")

set cheminSource="C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb"

REM Nom du dossier dans lequel le projet doit être copié. Le dossier sera créé sur DropBox, 

REM avec la date du jour à la fin de son nom (ex : monprojet)

set dossierCible=monprojet

REM Chemin du dossier DropBox (ex : C:\Users\VotreNom\Dropbox)

set cheminCible=C:\Users\VotreNom\Dropbox

REM Chemin du dossier contenant le fichier mysqldump.exe 

REM (ex : "C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\binaries\mysql\bin")

set cheminMySQLBin="C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\binaries\mysql\bin"

REM Nom de l'usager MySQL qui détient les droit requis pour sauvegarder la base de données

set usagerMySQL=root

REM Nom de la base de données à sauvegarder

set nomBD=mabd

REM *****************************

REM ***** Fin configuration *****

REM *****************************

REM ***** Création des variables pour la date *****

REM La commande "WMIC OS GET localdatetime" retrouve la date au format ISO. 

REM Le caractère ^ (caret) est un caractère d'échappement. 

REM Le caractère | (pipe) permet de rediriger la sortie de WMIC vers la commande find. 

REM Puisqu'on veut conserver toute la chaîne, on recherche n'importe quel caractère : find "."

REM Autrement dit, cette ligne place toute la date dans la variable dateISO.

for /f %%a in ('WMIC OS Get localdatetime  ^| find "."') do set dateISO=%%a

set annee=%dateISO:~0,4%

set mois=%dateISO:~4,2%

set jour=%dateISO:~6,2%

echo *************************

echo ***** Copie du site *****

echo *************************

@echo on

XCOPY %cheminSource%\%dossierSource%\* %cheminCible%\%dossierCible%-%annee%-%mois%-%jour% /S /I

@echo off

echo ***********************************************

echo ***** Création du script pour la BD MySQL *****

echo ***********************************************

@echo on

CD %cheminMySQLBin%

mysqldump -u %usagerMySQL% -p %nomBD% > %cheminCible%\%dossierCible%-%annee%-%mois%-%jour%\%nomBD%-%annee%-%mois%-%jour%.sql

@echo off

echo *******************

echo ***** Terminé *****

echo *******************

echo.

echo Les fichiers ont été copiés dans le dossier

echo %cheminCible%\%dossierCible%-%annee%-%mois%-%jour%

echo.

PAUSE

Notez que dans la commande XCOPY, l'option /S signifie qu'il faut copier les sous-dossiers non vides et l'option /I indique que si la destination n'existe pas et que plus d'un fichier est copié, la destination sera considérée comme un dossier.

Chemin contenant des caractères accentués

Je crois que tout le monde s'entend là-dessus : on devrait éviter à tout prix d'utiliser des caractères accentués dans les noms de fichiers et dans les noms de dossiers. Malheureusement, certains développeurs ne se sont pas conformés à cette bonne pratique alors il arrive des cas où nous devons tout de même composer avec des caractères accentués.

Si c'est votre cas, les précautions suivantes vous permettront d'adapter votre script pour qu'il puisse copier le contenu d'un dossier dont le chemin contient des caractères accentués.

  • Pour que les caractères accentués dans les noms de dossiers puissent être correctement interprétés, changez l'encodage du fichier pour ANSI. Les caractères accentués déjà présents dans le fichier apparaîtront sous forme de caractères bizarre. Vous pouvez les laisser tels quels. Cependant, les accents dans les noms de dossiers devront être écrits correctement sous cet encodage.
  • Au début de votre script, vous devez indiquer que les instructions contenues dans le script utilisent la page de code « Windows Latin 1 (ANSI) ». Ceci se fait à l'aide de la commande CHCP suivie du numéro correspondant à la page de code désirée, soit le 1252.
Fichier batch

CHCP 1252

...

XCOPY C:\Users\Étienne\Documents\VotreDossier\* C:\Users\Étienne\Dropbox\VotreDossier-%annee%-%mois%-%jour% /S /I

...

Exclusion de fichiers ou de dossiers

Notez qu'il est possible d'exclure certains fichiers ou sous-dossiers. Si tel est votre désir :

  • Créez un fichier texte utilisant l'encodage ANSI dans lequel vous listerez les fichiers et dossiers à exclure. 

    Vous devez placer un seul fichier ou dossier à exclure par ligne. 

    Les dossiers débuteront par \ et se termineront par \.

    Assurez-vous que le nom de votre fichier texte soit significatif car il sera utilisé dans votre commande XCOPY.

    Ex :

    Fichier texte contenant la liste des fichiers et dossiers à exclure

    \nomdossier\

    unfichieralaracine.aspx

    \autredossier\unfichierdanssousdossier.jpg

  • Dans votre fichier batch, modifiez la ligne XCOPY pour y ajouter, à la toute fin, l'option exclude. 

    Ex :

    Fichier batch

    XCOPY ... /exclude:fichiersexclus.txt

Pour plus d'information

« Code Pages ». MSDN. http://msdn.microsoft.com/en-us/library/windows/desktop/dd317752%28v=vs.85%29.aspx

« Code Page Identifiers ». MSDN. http://msdn.microsoft.com/en-us/library/windows/desktop/dd317756(v=vs.85).aspx

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories