Les bricolages de Heffgé |
Il arrive que l'on veuille conserver plusieurs versions d'un fichier qui, sans précaution particulière, est écrasé à chaque fois qu'il est utilisé. Tel logiciel, par exemple, consigne dans un journal une trace des actions qu'il a effectuées mais ne propose pas d'historisation. À chaque lancement il supprime son fichier log.txt et en recrée un nouveau.
Pour conserver une trace des exécutions précédentes il faut donc sauvegarder ce fichier journal. Pour limiter le nombre de sauvegardes on utilise un fichier à générations : la sauvegarde la plus ancienne est détruite avant création de la nouvelle.
Avec notre exemple et pour disposer d'un historique de 10 versions on va donc gérer 10 fichiers, nommés respectivement de log01.txt à log10.txt, log01.txt étant la version la plus récente.
Un simple script de type .bat permet de gérer automatiquement la rotation des fichiers.
Pour cet exemple nous nous fixerons les contraintes suivantes :
- le logiciel pgm.exe crée à chaque exécution un fichier journal log01.txt
- tous deux sont accessibles par le même chemin ;
- conservation de 20 versions de ce fichier.
Voici le script correspondant :
@echo off
::--------------
::init variables
::--------------
set chem=unité:\répertoire
::-----------------
::rotation fichiers
::-----------------
if exist %chem%\log20.txt del %chem%\log20.txt
if exist %chem%\log19.txt ren %chem%\log19.txt log20.txt
if exist %chem%\log18.txt ren %chem%\log18.txt log19.txt
if exist %chem%\log17.txt ren %chem%\log17.txt log18.txt
if exist %chem%\log16.txt ren %chem%\log16.txt log17.txt
if exist %chem%\log15.txt ren %chem%\log15.txt log16.txt
if exist %chem%\log14.txt ren %chem%\log14.txt log15.txt
if exist %chem%\log13.txt ren %chem%\log13.txt log14.txt
if exist %chem%\log12.txt ren %chem%\log12.txt log13.txt
if exist %chem%\log11.txt ren %chem%\log11.txt log12.txt
if exist %chem%\log10.txt ren %chem%\log10.txt log11.txt
if exist %chem%\log09.txt ren %chem%\log09.txt log10.txt
if exist %chem%\log08.txt ren %chem%\log08.txt log09.txt
if exist %chem%\log07.txt ren %chem%\log07.txt log08.txt
if exist %chem%\log06.txt ren %chem%\log06.txt log07.txt
if exist %chem%\log05.txt ren %chem%\log05.txt log06.txt
if exist %chem%\log04.txt ren %chem%\log04.txt log05.txt
if exist %chem%\log03.txt ren %chem%\log03.txt log04.txt
if exist %chem%\log02.txt ren %chem%\log02.txt log03.txt
if exist %chem%\log01.txt ren %chem%\log01.txt log02.txt
::---------
::commandes
::---------
%chem%\pgm.exe
Afin de simplifier l'écriture on commence par initialiser une variable d'environnement avec le chemin d'accès unique (programme et fichier journal).
On effectue ensuite la rotation des fichiers. Le plus ancien est supprimé puis chacun des suivants est renommé avec le nom du précédent.
On termine en lançant l'exécution de pgm.exe qui va créer un nouveau fichier log01.txt, l'ancien ayant été sauvegardé sous le nom log02.txt.
La collection des 20 versions se construit progressivement sans qu'il soit nécessaire de créer tous ces fichiers au préalable.