Outils Les bricolages de Heffgé

Gérer un fichier à générations avec un .bat

Fichiers à générations

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.

Exemple de script

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

Commentaires

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.

 

Toutes les pages du site Les autres sites

accueil
carnet d'adresses et enveloppes
comparaison de dossiers
connexion/déconnexion
contenu d'un dossier
contrôle GPO
conversion ASCII/ANSI
débrider une Livebox SAGEM ou Inventel ancien modèle
gérer un fichier à générations dans un .bat
les pilotes oubliés
mise à la date et à l'heure automatique
nettoyage et arrêt Windows 9x
orthodromie
vidage du répertoire Temp utilisateur et suppression des fichiers temporaires Internet Explorer (Windows XP et Windows 7)
quelques macros pour Word

Tentatives de bonnes réponses à des questions qui peuvent ne pas l'être

 

Le DOS sied