Accueil > Dossiers > MS-DOS

MS-DOS (partie de l'initié, 1)
Qu'allons nous apprendre dans ce dossier ?

Après une première série consacré aux rudiments du MS-DOS, nous allons aborder une structure plus complexe des fichiers bath, avec un menu, la possibilité de les lancer à un moment donné, et l'appel à des greffons Pour cela, nous utiliserons majoritairement des commandes pour windows XP et parfois NT et ME : at, title, color, ainsi que les nouveautés de la commande set.


SOMMAIRE DU TUTORIAL 4

I. Création du menu et personnalisation
a) Un menu avec Set, les tags et If
b) Exemple de menu pour la date et l'heure
c) Les commandes title et color pour personnaliser

II. Executer notre batch selon l'heure
a) La commande At de tâches planifiées
b) Connaître le path

III. L'appel à des greffons
a) Appeller un programme ou le lancer
b) Transmission des paramètres


I. Création du menu et personnalisation

a) Un menu avec Set, les tags et If >> vers le sommaire
Sous Windows 98 et quelques autres anciens, il était possible d'utiliser une commande nommée Choice. Elle a disparue sous XP mais en échange, la commande Set a reçue de nouvelles options. Alors que Choice était largement suffisante pour une question simple, à oui ou non, on se retrouve à faire tourner une usine à gaz...

Créez votre programme en tapant le code suivant :
C:
Cd\
copy con Aqualonne.bat
@Echo off
Cls
:Menu
Echo 1. Quitter le programme
Echo 2. A propos de...
set choix=
set/p choix=Entrez votre choix.
if '%choix%'=='1' goto fin
if '%choix%'=='2' goto apropos
Echo Choix non valide.
goto Menu
:apropos
Echo Programme implementant un menu.
goto Menu
:fin
Touche F6

Si vous avez fait une erreur, soit sous Windows faites un clic droit sur le programme et prenez "modifier", soit sous dos entrez Edit Aqualonne.bat afin d'avoir accès à l'éditeur, puis sauvegardez. Examinons maintenant ce programme : vous savez que C: suivi de Cd\ va nous positionner à la racine de la partition C, et que copy con Aqualonne.bat va créer un fichier batch du nom d'Aqualonne. Nous réexploitons aussi Echo et Cls vus dans la partie précédente. A présent, les nouveautés :
- Le programme peut-être structuré avec des tags, comme :Menu et :apropos. Les : permettent de définir le nom qui suit en tant que tag. Une structure efficace est celle qui se termine par :fin (ou :eof, pour End Of File).
- Pour naviguer d'un endroit à un endroit, on utilise la commande goto (signifiant "aller à") qui permet de se positionner à un tag.

En exploitant ceci, essayez de prédire le fonctionnement du code ci-dessous :
:Menu
goto Suite
:Milieu
goto Menu
:Suite
goto Milieu
:fin

Vous voyez que le programme passe au tag Suite, puis au tag Milieu, et revient au tag Menu. Il va donc fonctionner en boucle, et n'arrivera jamais à la fin. Si vous l'éxécutez, pour le fermer il suffit d'appuyer sur Ctrl+C : cette touche demande la fermeture immédiate d'un programe en mode console. A présent, la commande set.

Elle permet d'utiliser des variables : set choix= déclare la variable. Le commutateur /p fait apparaître un message et initialise la variable à la réponse de l'utilisateur. Voici un exemple :
set exemple=
set/p exemple=Entrez la valeur de la variable.

On déclare une variable nommée "exemple" et on affiche à l'utilisateur le message "Entrez la valeur de la variable", sa réponse étant stockée dans exemple. Après, il faut exploiter cette valeur par exemple avec des tests ; if est le plus courant, il signifie "si cette condition est vérifiée, alors on fait cette opération". Un exemple :
set reponse=
set/p reponse=Souhaitez-vous poursuivre ce tutorial ? (o/n)
if '%reponse%'=='o' Echo C'est gentil pour moi qui l'ecrit...
if '%reponse%'=='n' Echo Tant pis...

 

b) Exemple de menu pour la date et l'heure >> vers le sommaire

A partir de ce que nous avons vu précédemment, voici le code du fichier batch :
@Echo off
Cls
:Menu
Echo 1. Afficher l'heure
Echo 2. Afficher la date
Echo 3. Quitter
set choix=
set/p choix=Entrez votre choix.
if '%choix%'=='1' goto heure
if '%choix%'=='2' goto date
if '%choix%'=='3' goto fin
Echo Choix non valide.
goto Menu
:heure
Time/T
goto Menu
:date
Date/T
goto Menu
:fin

Nous avons structuré un programme avec trois possibilités : afficher l'heure, la date, ou quitter. On utilise donc des tags selon le choix de l'utilisateur. Quelques détails sur les deux commandes que nous introduisons :
- La commande Date s'utilise soit de deux manières. Soit en la tapant directement, et alors l'ordinateur demande la nouvelle date (vous pouvez appuyer sur entrée pour conserver l'actuelle), soit avec le commutateur /T pour simplement l'afficher.
- La commande Time fonctionne de même. En la tapant directement on demande la nouvelle date (appuyer sur entrée pour conserver l'actuelle), et avec le commutateur /T on réalise uniquement l'affichage.

 

b) Les commandes title et color pour personnaliser >> vers le sommaire

Avec windows XP, on a eu une nouveauté plutôt gadget, mais autant en parler puisqu'elle existe. Il s'agit des commandes permettant de modifier l'aspect de la fenêtre de commande. La première est Title qui change le nom de la fenêtre dans celui précisé par l'utilisateur, par exemple :
Title Dossier

Si vous utilisez le signe = entre la commande et le nom a spécifier, cela n'aura aucune incidence. Title=dossier est équivalent à Title = dossier ou Title dossier.

L'autre commande est Color qui définit à l'aide de deux chiffres héxadécimaux les couleurs de premier puis d'arrière-plan. L'exemple suivant donne un fond blanc et des caractères pourpres :
Color F5

Les couleurs possibles sont celles de la table suivante :

Couleur
Indice
Couleur
Indice
Couleur
Indice
Couleur
Indice
Noir
0
Marron
4
Gris
8
Rouge
C
Bleu foncé
1
Pourpre
5
Bleu clair
9
Rose
D
Vert
2
Kaki
6
Vert clair
A
Jaune
E
Bleu-gris
3
Gris clair
7
Cyan
B
Blanc
F

Pour rétablir la couleur au lancement de la console (en général fond noir et lettres en gris clair), il faut suffit de taper la commande Color sans aucun paramètre. Enfin, une possibilité pour utiliser ces gadgets pourrait-être de se démarquer quand on utilise notre batch ; voici le code à taper pour créer le batch qui nous intéresse :
C:
Cd\
copy con Running.bat
@Echo off
Cls
Title Aqualonne v1.0 is running
color 1B
pause
Title Invite de commandes
color 07

Ce programme aura pour effet de donner comme nom à la console "Aqualonne v1.0 is running" en lettres bleu foncé sur bleu clair, puis de rétablir la configuration type à la fermeture du programme.


II. Executer notre batch selon l'heure

a) La commande AT de tâches planifiées >> vers le sommaire

At est encore une de ces nouvelles commandes qu'on trouve dans windows NT, 2000 ou XP. Elle permet de demander le lancement d'une application à des dates et heures données. A chaque fois qu'on lui formule une demande, le programme attribue à celle-ci une ID (code d'identification) ; si c'est la première, elle aura pour ID 1. Dès que la tâche a été éxécutée, l'ID est automatiquement détruite ; il n'y a pas glissement : si l'ID 1 est détruite, l'ID 2 reste 2.

Si au moment où la commande doit s'éxécuter vous pensez travailler sur l'ordinateur, alors utilisez le commutateur /INTERACTIVE. Imaginons que l'heure de votre ordinateur (faites TIME /T) soit 18:35, et que le programme Running.bat soit à la racine du disque C, voici la commande qui l'éxécutera deux minutes plus tard :
at 6:37PM /INTERACTIVE "c:\running.bat"

L'heure doit-être donnée aux normes anglaises. Par-exemple, 18:35 est 6:35 de l'après-midi, donc on marque 6:35PM. De même que PM représente l'après-midi (Post-Morning), AM représente la matinée ; si vous ne mettez rien, le type AM est appliqué par défaut.

Certains programmes peuvent-être lancés sans avoir à préciser leur chemin, par exemple s'il est 18:39 :
at 6:40PM /INTERACTIVE "calc"

Vous verrez la calculette se lancer une minute plus tard. Notons que lorsque vous avez entré la commande At, l'ordinateur vous repond "Tâche ajoutée avec ID = 1" ou une ID supérieure si d'autres tâches étaient programmées. Vous pouvez demander l'ordinateur à quoi correspond l'ID en tapant At 1 pour interroger l'ID 1. La réponse est alors la suivante (n'oubliez pas que si la tâche a été éxécutée, l'ID a disparue) :
ID tâche : 1
Etat : OK
Calendrier : Aujourd'hui
Heure du jour : 18:39 PM
Interactive : Oui
Commande : calc

Notons toutefois que 18:39 PM ne correspond pas à grand chose, mais la traduction a été hasardeuse... Concernant la suppression de tâches planifiées, si vous voulez détruire l'opération associée à l'ID 1, tapez At 1 /delete. Pour détruire toutes les tâches planifiées, vous pouvez utiliser at /delete /yes.

Enfin, vous avez deux commutateurs /NEXT et /EVERY qui signifient que la tâche se lancera le prochain jour indiqué ou tous les jours indiqués. Leur structure est la même : le commutateur doit être suivi de : puis du jour concerné, donné soit en chiffre (par exemple 3 pour le 3ème jour du mois) soit en lettres. Voici deux exemples :
at 6:40PM /INTERACTIVE /EVERY:5 "c:\running.bat"
at 6:40PM /INTERACTIVE /NEXT:5 "c:\running.bat"

Si vous voulez donner le nom du jour plutôt que le nombre, utilisez le tableau suivant :

Jour concerné
Lundi
Mardi
Mercredi
Jeudi
Vendredi
Samedi
Dimanche
Origine
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
Indicatif pour le commutateur
m
t
w
th
f
s
su

Par exemple, si vous voulez lancer le programme tous les samedi à 10h du soir vous taperez :
at 10:00PM /INTERACTIVE /EVERY:s "c:\running.bat"

 

b) Connaître le path >> vers le sommaire

Si certains programmes peuvent-être lancés sans avoir à spécifier leur emplacement, c'est parce qu'ils sont dans le path. Qu'est-ce que le path ? Un ensemble de répertoires où le MS-DOS va chercher ses programmes par défaut. Ainsi, pour ne pas avoir à spécifier l'emplacement de running.bat, nous n'avons qu'à le placer dans le path. Pour connaître les répertoires qui y sont affiliés, deux possibilités : soit taper path, soit taper set et lire la ligne Path=. La commande set est plus intéressante puisqu'elle nous donne tous les renseignements sur les variables d'environnements ; par exemple, votre nom d'utilisateur, l'endroit où est stocké votre profil, le nombre de processeurs et l'architecture..

Vous verrez donc une ligne de ce type :
PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem

Ce qui signifie que les programmes se trouvant dans ces trois répertoires seront trouvés si on donne uniquement leur nom. Par ailleurs, s'il y a plusieurs fichiers du même nom dans les path mais pas de la même extension, le MS-DOS applique un ordre de priorité : d'abord les fichiers .COM, puis les .EXE, et enfin les .BAT.

Conclusion de la partie.
Vous devez maintenant pouvoir copier des fichiers avec COPY, en détruire avec DEL, et renommer des fichiers ou des répertoires avec RENAME. Bref, vous savez la plupart des choses à utiliser dans un futur programme d'installation.


III. L'appel à des greffons

a) Appeller un programme ou le lancer >> vers le sommaire

Le lancement d'un programme à partir d'un autre peut-être considéré de deux façons, selon qu'une fois le programme finit, la suite du code se poursuive ou non dans le programme d'origine. C'est-à-dire qu'on veut savoir, après l'appel du programme, qui prend la main. Sachant que vous êtes à la racine du disque C où se trouve le fichier running.bat, voici un code :
@Echo off
Cls
Echo chargement du module externe.
pause
running
Echo Chargement effectue.

En tapant ce code et en executant le batch qui en resulte, vous vous apercevrez que le message "Chargement effectue." ne s'affiche pas. Pourquoi ? La suite de vos actions va dans le programme running, mais ne revient pas. Pour continuer le script une fois le programme appelé finit, il faut utiliser la commande call :
@Echo off
Cls
Echo chargement du module externe.
pause
Call running
Echo Chargement effectue.

 

a) Transmission des paramètres >> vers le sommaire

Voici le code d'un fichier nom.bat :
@Echo Off
Echo Identifiant %1
Echo Le client est %2 age de %3 ans

Lorsque le fichier nom sera utilisé, vous pourrez lui donner trois arguments. Par exemple, nom GH39 Jean 23. Ceci va envoyer au programme les valeurs des arguments 1, 2, et 3. Ce schéma se répète sans problème ; vous pouvez par exemple utiliser d'autres paramètre %4 et %5 correspondants à sa ville de naissance et à son statut (célibataire, marié, pacsé, veuf...). Maintenant, voici le code du fichier script.bat qui va utiliser nom.bat :
@Echo Off
Cls
Call nom GH39 Jean 23
Echo Ce client a ete ajoute a notre liste.

Ce script va faire appel à nom.bat tout en lui transmettant la série d'arguments nécessaire. Nous verrons dans le tutorial suivant comment stocker la liste des utilisateurs en memoire...



Avec toutes ces nouvelles notions, vous allez pouvoir créer un programme d'une part plus complexe, mais aussi graphiquement plus original avec son titre et ses couleurs. L'idée de rajouter des clients a une liste sera le fil conducteur de la première partie du tutorial suivant.

Si vous avez des questions, n'hésitez pas à me contacter.