MS-DOS : Renseigner une variable avec le chemin actif

Le problème
Principe
Mise en oeuvre
Pour aller plus loin

Le problème

Voici un cas typique d'utilisation de cette petite astuce :
Vous vous êtes constitué une disquette de démarrage sous MS-DOS pour la maintenance de votre PC (images de partitions, re-partitionnement, récupération de fichiers, ...) en vous inspirant de la disquette de démarrage de Windows 98 SE.
Le matériel évoluant, vous avez repris tout cela pour faire un CD de démarrage, une clé USB de démarrage, voire une partition dédiée sur votre disque dur.

L'ennui, c'est qu'au démarrage, chacun de ces supports se voit affecter une lettre d'unité différente, la variable PATH définie dans votre fichier AUTOEXEC.BAT est spécifique à chacun de ces supports, voire à la combinaison support/machine. Dès que vous modifiez votre AUTOEXEC.BAT (par exemple pour y ajouter un utilitaire), vous devez le faire sur chaque support.
Vous aimeriez bien simplement pouvoir écraser l'ancienne version par la nouvelle, mais pour cela, il faudrait que le PATH soit automatiquement renseigné en fonction de la lettre d'unité de démarrage.

Principe

On peut trouver sur internet certaines solutions à ce problème, mais je n'en ai trouvé aucune qui fonctionne avec cette version de MS-DOS très courante  (celui livré avec Windows 98SE).

Elles utilisent généralement des possibilités de CALL et/ou SET qui n'existent par dans cette version.

Petit rappel : pour définir les chemins que doit utiliser DOS, la commande est, par exemple :

PATH=C:\;C:\DOS;C:\CMD 

Par rapport à notre besoin, on peut se faciliter la vie en renseignant au départ une variable contenant la lettre de l'unité :

SET UNITE=C:\
PATH=%UNITE%;%UNITE%DOS;%UNITE%CMD

ce qui donne un résultat strictement identique

Le problème se résume maintenant à alimenter automatiquement la variable UNITE dès le début du fichier AUTOEXEC.BAT, c'est à dire à lancer la commande SET UNITE=x:\ avec la bonne valeur de x.

Le principe est le suivant :

  1. On a créé un fichier texte n°1 dont le contenu est simplement SET UNITE=
  2. Au début du fichier AUTOEXEC.BAT, on lance une commande CD sans paramètre, ce qui affiche normalement le chemin courant ; par exemple : C:\
  3. On redirige le résultat de cette commande vers un fichier texte n°2.
  4. On concatène les contenus des fichiers n°1 (SET UNITE=) et n°2 (C:\)  dans un fichier de commande .BAT
  5. On exécute le fichier .BAT nouvellement créé, ce qui crée la variable UNITE avec la bonne valeur

Mise en oeuvre

Le début du fichier AUTOEXEC.BAT peut être par exemple :

CD>rep.txt
COPY cmd_set.txt+rep.txt setrep.bat
CALL setrep.bat
ERASE setrep.bat
ERASE rep.txt
PATH=%UNITE%;%UNITE%DOS;%UNITE%CMD

Il faut qu'un fichier cmd_set.txt soit présent au même niveau qu'AUTOEXEC.BAT et contienne :

SET UNITE=

Point important : pour que la concaténation donne lieu à une seule ligne, il ne faut pas que ce fichier comporte les caractères de fin CR LF habituels sous DOS.
Le moyen le plus simple consiste à créer ce fichier avec le Bloc-notes de Windows, le codage des caractères que nous utilisons étant le même sous DOS et Windows.

Mais vous pouvez aussi le créer entièrement sous DOS, au moyen de l'éditeur EDIT :

  1. Lancer l'éditeur EDIT
  2. Saisir  SET UNITE=
  3. Sauvegarder le fichier (Fichier / Enregistrer sous)
  4. Fermer le fichier (Fichier / Fermer)
  5. Ouvrir le fichier en mode binaire (Fichier / Ouvrir)

    Copie d'écran Pour celà, dans la fenêtre qui s'affiche, cocher Fichier bin, comme on le voit ci-contre.


  6. Supprimer les 2 caractères bizarres apparaissant après le signe =
    Copie d'écran qu'on voit sur l'image ci-contre
  7. Sauvegarder et fermer le fichier

Les copies d'écran ci-après montent le contenu du fichier en hexadécimal avant et après modification : Copie d'écran

Copie d'écran


Dernière mise à jour de cette page : 12/8/2007