[Plan du site]
Vous êtes ici ---
> Le Site du Zéro
> Les tutoriels
> Non-Officiels
> Systèmes d'exploitation
> Windows
> MS-DOS
> Lecture du tutoriel
Le batch
Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Salut tout le monde !
Tout d'abord, si, en lisant ce tuto (que je me suis efforcé de rendre le plus simple possible), vous ne compreniez pas quelque chose ou si vous vouliez faire un commentaire quelconque (oublis, etc.), envoyez-moi un MP avec, que je puisse m'y retrouver

, la raison entre crochets ([aide] ou [commentaire]). Merci !
Ensuite, comme c'est le principe du site, aucune connaissance en informatique n'est requise pour aborder ce tutoriel.
Franchement, je vous assure que ce tuto va vous reposer par sa simplicité...
Assez baratiné : si on passait aux choses sérieuses ?
L'interprétation
Nous allons commencer en douceur, ce sera barbant pour certains mais au moins ça permettra que tout le monde puisse créer ses progs au fur et à mesure avec les informations données.
Ainsi donc, avant de continuer, il faut que vous sachiez "interpréter", c'est-à-dire passer du code source (fichier texte) entré dans le Bloc-notes à programme exécutable (fichier batch, en l'occurrence) qui se réalisera dans une invite de commandes.
Pour cela, enregistrez votre code source sous le nom que vous souhaitez, et faites suivre l'extension
.bat (ou
.batch).
N'oubliez pas de modifier le champ "Type" !
Écrire le code source
Rappels : le batch est une suite de commandes MS-DOS.
Donc, il suffit de connaître les commandes (ou presque
) afin de faire telle ou telle chose.
Les commandes du batch sont relativement simples. Il suffit de les noter les unes sous les autres. Je vous assure, ça fait du bien quand on se prend à comparer avec du C...
Ainsi donc, réaliser un programme en batch n'est pas d'une complexité insurmontable. Encore faut-il connaître les commandes de base et leurs effets.
La commande echo off
La commande
echo off est une commande extrêmement utilisée.
Elle sert à cacher le chemin d'accès jusqu'au programme et les commandes qui la suivent...
Si ce n'est pas très clair, entrez ce code dans le Bloc-notes et compilez-le :
Code : Autre
Essayez maintenant sans
echo off, et vous pouvez constater qu'
avec echo off, une ligne disparaît :
"
C:\Documents and Settings\Votre_nom\Mes documents\Programmes>
pause "
- La partie en violet est le chemin d'accès jusqu'au programme.
- La partie en rouge est le nom de la commande pause.
En revanche, vous avez sans doute aussi remarqué qu'une ligne était apparue :
"
C:\documents and Settings\Votre_nom\Mes documents\Programmes>
echo off "
En effet,
echo off est une commande, et bien qu'elle serve à les cacher, elle ne peut pas se cacher toute seule !
Vous vous dites sûrement : "Malédiction ! Sommes-nous donc condamnés à faire des programmes en batch si moches ?".
Eh bien, la réponse est
non 
. Tout a été pensé !
Effectivement, et si l'utilisateur n'avait voulu cacher que certaines commandes ?
Il a alors été décrété que le caractère @ inscrit
devant les commandes en question servirait de cache.
Donc, si vous avez suivi mon raisonnement, pour faire quelque chose de propre, il faut utiliser...
Secret (cliquez pour afficher)@echo off ! Bravo !

N.B. : il existe trois commandes formées de la commande echo. Les voici :
- echo off : cache le chemin d'accès et les commandes sauf pour elle-même.
- echo : affiche un message à l'écran.
- echo. : saute une ligne.
La commande echo
La commande
echo permet d'afficher un message.
Sa syntaxe :
echo message
Pas dur, hein ?
Ainsi, par exemple, si dans le Bloc-notes j'écris :
echo Yop ! Vive le site du Zér0 !
...dans l'invite de commandes, il y aura marqué
Yop ! Vive le site du Zér0 !. Bon : je pense que vous avez compris, là quand même...
N.B. : la commande echo. permet de sauter une ligne. N'hésitez pas à l'utiliser !
La pause
La
pause est la commande la plus importante. Elle est présente dans quasiment tous les programmes en batch.
Vous allez me dire : "mais alors, pourquoi n'avons-nous pas commencé par là ?"
Tout simplement parce que c'est la commande de fin !
La
pause est indispensable (sauf si vous êtes du côté obscur de la force

).
- Sans elle, en exécutant le programme, les opérations se réaliseraient si vite que l'on ne pourrait pas les voir.
- Avec elle, une ligne est inscrite dans l'invite de commandes : "Appuyez sur une touche pour continuer".
Après que l'utilisateur a appuyé sur la touche en question, le programme s'arrête.
N.B. : si la pause est suivie d'une autre commande, l'ordinateur attendra le signal de l'utilisateur avant de poursuivre les opérations normalement.
Please... help !
Vous connaissez les fonctions de base. Ouvrez une invite de commandes et tapez la commande
help.
Et...

!
Des commandes, des commandes et encore des commandes ! Si vous voulez plus d'informations sur l'une d'entre elles, tapez :
help commande
Et revoilà Merlin :

!
N.B. (j'aime bien ça
) : avec ça, vous n'avez normalement plus besoin de mon aide...
En effet, l'aide de l'invite de commandes est très bien faite... Ceci dit, vous pouvez continuer avec moi...
IP et connexions
Ici, nous allons vite voir deux commandes inactives hors connexion, puisqu'il s'agit de l'
ipconfig et
netstat.
L'
ipconfig vous donne :
- votre adresse ip
- le masque de sous-réseau
- la passerelle par défaut.
netstat vous donne :
Perso, j'utilise souvent l'
ipconfig pour connaître mon IP.
Notes sur certaines commandes utiles
- cls : efface l'écran. Très utile si vous voulez exécuter une action sans que l'utilisateur s'en aperçoive.
- del : supprime un ou plusieurs fichiers. No comment. Syntaxe : del fichier.type.
- title : donne un titre à l'invite de commandes. Syntaxe : title nom.
- start : exécute un autre programme dans une nouvelle fenêtre. Syntaxe : start programme.
- print : imprime un fichier texte.
Pour les arguments de del, tapez del /?...
Pour créer un fichier :
commande > fichier.type
Par exemple, pour créer un fichier texte dans lequel sera inscrite l'IP de l'utilisateur :
Code : Autre1
2
3
4
| @echo off
ipconfig
ipconfig > ips.txt
pause |
Si vous tapez deux ">", lorsque vous exécuterez le programme pour la seconde fois, l'IP de l'utilisateur sera inscrite après la précédente et dans le même fichier.
La boucle if / else
Les conditions dans les programmes en batch ne vous seront vraiment utiles que lorsque vous aurez lu le chapitre sur les variables. Cependant, vous pouvez déjà vous amusez avec "
if exist ".
Quelques manières d'utiliser
if :
- if exist fichier.type (action) else action_2
- if "condition"=="valeur" commande
Pour les non anglophones (ou les allergiques aux cours

) :
else signifie ici
autrement.
L'errorlevel est abordé plus loin dans ce tuto, dans le chapitre déstiné aux variables.
Notez que si vous activez les extensions de commandes (
voir setlocal),
if est modifié, selon "
help if ", comme suit :
Citation : help if IF /i "Chaîne1" comparant "Chaîne2" commande
Où " comparant " peut être :
EQU - égal à...
NEQ - différent de...
LSS - inférieur à...
LEQ - inférieur ou égal à...
GTR - supérieur à...
GEQ - supérieur ou égal à...
...Et le commutateur /i, s'il est spécifié, demande d'ignorer la casse dans la comparaison des chaînes.
Shutdown / Net config / Ping
Ces commandes ne figurent pas dans la liste lors de la saisie "
help ". Je les ai trouvées en faisant quelques recherches sur telnet ou en lisant des forums divers. Je vous les sers comme sur un plateau : sympa, hein ?
Je vous copie l'invite de commande

:
Citation : shutdown -?Utilisation : shutdown [-i | -l | -s | -r | -a] [-f] [-m nom_ordinateur] [-t xx] [-c "commentaire"]
[-d up:xx:yy]
Sans argument : affiche ce message (identique à -?)
-i : affiche l'interface graphique, doit être la 1ère option
-l : ferme la session (ne peut pas être utilisé avec l'option -m)
-s : met l'ordinateur hors tension
-r : met l'ordinateur hors tension et le redémarre
-a : annule une mise hors tension système
-m nom_ordinateur : ordinateur distant à mettre hors tension / à redémarrer / annuler
-t xx : définir le délai d'expiration pour la mise hors tension à xx secondes
-c "commentaire" : commentaire de la mise hors tension (maximum de 127 caractères)
-f : force des applications en cours d'exécution à se fermer sans avertissement
-d [u][p]:xx:yy : le code de raison de la mise hors tension
u est le code utilisateur
p est un code de mise hors tension planifié
xx est le code de raison majeur (valeur entière inférieure à 256)
yy est le code de raison mineur (valeur entière positive inférieure à 65536)
Citation : net config /?La syntaxe de cette commande est :
NET CONFIG
[SERVER | WORKSTATION]
Essayez donc...
Elle vous donne notamment le nom de votre ordinateur (non, pas Windows, ça c'est l'OS !)
Heu... Pourquoi vous me criez " Linux " ?
Citation : pingUtilisation : ping [-t] [-a] [-n échos] [-l taille] [-f] [-i vie] [-v TypServ] [-r NbSauts] [-s NbSauts]
[[-j ListeHôtes] | [-k ListeHôtes]] [-w Délai] NomCible
-t : envoie la requête ping sur l'hôte spécifié jusqu'à interruption.
Entrez Ctrl-Attn pour afficher les statistiques et continuer, Ctrl-C pour arrêter.
-a : recherche les noms d'hôtes à partir des adresses.
-n échos : nombre de requêtes d'écho à envoyer.
-l taille : envoie la taille du tampon.
-f : active l'indicateur Ne pas fragmenter dans le paquet.
-i vie : durée de vie.
-v TypServ : type de service.
-r NbSauts : enregistre l'itinéraire pour le nombre de sauts.
-s NbSauts : dateur pour le nombre de sauts.
-j ListeHôtes : itinéraire source libre parmi la liste d'hôtes.
-k ListeHôtes : itinéraire source strict parmi la liste d'hôtes.
-w Délai : délai d'attente pour chaque réponse, en millisecondes.
La commande set
Les variables... les variables ?
Non... eh bien si ! En batch aussi, il y a possibilité de déclarer des variables...
Rentrons dans le vif du sujet.
- Pour déclarer une variable, utilisez set.
- Pour l'afficher, utilisez %variable%
Par exemple :
Code : Autre1
2
3
4
5
| @echo off
set couleur=bleu
echo Vous avez la couleur %couleur%
echo.
pause |
N'utilisez pas le signe "=" dans vos noms de variables !
Vous savez dorénavant déclarer des variables contenant des caractères.
Pour des nombres, utilisez
set avec
/a comme argument. Encadrez vos valeurs par des guillemets.
Un exemple :
Code : Autre1
2
3
4
5
| @echo off
set /a note="14"
echo J'ai eu %note% en maths aujourd'hui ! (Non authentique ^^)
echo.
pause |
Si vous ne savez pas ce que sont les nombres héxadécimaux ou la notation octale, c'est pas bien grave...
Si toutefois vous êtes intéressés, essayez ce lien :
Langage binaire, héxadécimal, octal
Bien revenons en à nos moutons...
Il est possible d'utiliser la commande
set avec
/p comme argument. Dans ce cas-ci, l'utilisateur doit entrer la valeur de la variable.
Exemple :
Code : Autre1
2
3
4
5
| @echo off
set /p nom=Quel est votre nom please ?
echo Ah, vous etes %nom%...
echo.
pause |
L'expansion retardée de variables
Mais qu'est-ce que ça peut bien être...
Pour l'expliquer, je vais pomper dans "
help set " ...
Donc, essayez ce programme :
Code : Autre1
2
3
4
5
6
7
| @echo off
set var=avant
if "%var%"=="avant" ( set var=apres
if "%var%"=="apres" echo Ca marche !
)
echo.
pause |
Vous remarquez que le message "
Ca marche ! "
ne s'affiche pas...
Mais pourquoi ?
Citation : help setLa variable %var% présente dans les deux instances de if est remplacée à la lecture de la première instance de if, étant donné que le corps de if, instruction composée, est logiquement inclus. Donc le if compris dans l'instance compare "avant" avec "après" et il n'y aura jamais égalité.
La solution proposée est d'utiliser l'expansion retardée de variables, que l'on active avec
setlocal.
Pour l'activer :
Code : Autre1
2
3
| @echo off
setlocal enabledelayedexpansion
pause |
Puis, remplacez "
%" par "
!". Ainsi, le code final donne :
Code : Autre1
2
3
4
5
6
7
8
| @echo off
setlocal enabledelayedexpansion
set var=avant
if "%var%"=="avant" ( set var=apres
if "!var!"=="apres" echo Ca marche !
)
echo.
pause |
Si vous essayez, vous allez remarquer que... ça ne marche pas !
En fait, le programme marche bel et bien, mais vous ne vous en rendez pas compte...
En effet, le
@echo off cache tout ce qui nous intéresse, c'est-à-dire tout sauf :
Code : Autre
Par conséquent, enlevez le
@echo off, le programme est bien moche mais au moins, on voit ce qu'on fait...
Errorlevel
Vous vous souvenez de la partie "
if /
else " ?
Eh bien voici une troisième manière d'utiliser
if...
L'argument
errorlevel teste la valeur numérique d'un booléen [
Rappel : 0 = faux ; 1 et + = vrai ].
La commande setlocal associée à un argument valide tel que ENABLEdelayedEXPANSION retourne la valeur 0. Gardez-le à l'esprit quand vous lirez mon exemple !
Exemple :
Code : Autre1
2
3
4
| @echo off
setlocal ENABLEdelayedEXPANSION
if errorlevel 0 ( echo L'expansion retardee de variable est ON )
pause |
Ce code vérifiera si l'expansion retardée de variables est activée.
De plus, si vous souhaitez, par exemple, connaître la valeur en cours de
errorlevel, rien de plus simple :
Code : Autre1
2
3
| @echo off
echo La valeur d'errorlevel actuelle est %errorlevel%
pause |
Vous pouvez aussi faire comme l'indique "
help if " :
Citation : help if@echo off
goto answer%errorlevel%
:answer0
echo Le programme a retourné le code 0
:answer1
echo Le programme a retourné le code 1
echo.
pause
Les arguments de setlocal
Comme nous l'avons vu plus haut,
setlocal sert à activer
l'expansion retardée de variables. Bien. Sachez aussi qu'il sert à activer
les extensions de commandes.
Arguments :
- ENABLEextensions : active les extensions de commandes.
- DISABLEextensions : désactive les extensions de commandes.
- DISABLEdelayedEXPANSION : désactive l'expansion retardée de variables.
- ENABLEdelayedEXPANSION : active l'expansion retardée de varialbes.
Endlocal restaure la valeur de l'état activé / désactivé des extensions de commandes à celle précédant l'exécution de la commande setlocal.
Notez aussi qu'il existe d'autres manières d'activer les extensions :
- cmd /e:on = /x : active les extensions de commandes.
- cmd /e:off = /y : désactive les extensions de commandes.
- cmd /v:on : active l'expansion retardée de variables.
- cmd /v:off : désactive l'expansion retardée de variables.
Les extensions de commandes sont activées par défaut...
Les variables date et time
Imaginez que vous vouliez qu'un programme ne s'exécute qu'à une heure précise en un jour précis...
Comme le 24 décembre

...
Vous avez deux façons de procéder :
- avec la commande at : perso je ne l'utilise pas vraiment et je ne l'expliquerai pas (+ d'infos => at /?)...
- avec les variables %date% et %time% : on va voir ça...
Ça va être plutôt court...
Si, par exemple, vous souhaitez que l'utilisateur ne puisse exécutez le prog que le jour de Noël, tapez :
Code : Autre1
2
3
4
5
6
| @echo off
echo Tu es le %date%...
if "%date%"=="24/12/2005" ( ton_prog
) else echo On n'ouvre pas les cadeaux avant le grand jour...
echo.
pause |
Procédez de même pour l'heure...
Les couleurs
Héhé, grâce au batch, vous pouvez mettre de la couleur dans votre console, ce qui égaiera aussi bien vos progs en batch qu'en C...
Chaque couleur correspond en fait à un chiffre (eh oui, pas une lettre) héxadécimal.
Je ne vais pas me lancer dans des explications longues et inutiles, je me contente juste de mettre une table pour les curieux :
Secret (cliquez pour afficher)1 = 1
2 = 2
3 = 3
...
9 = 9
10 = A
11 = B
12 = C
...
15 = F
Le premier chiffre sera la couleur de l'arrière plan, et le second celui des caractères.
Citation : Correspondance chiffres / couleurs0 = Noir
1 = Bleu foncé
2 = Vert
3 = Bleu gris
4 = Marron
5 = Pourpre
6 = Kaki
7 = Gris clair
8 = Gris
9 = Bleu clair
A = vert clair
B = Cyan
C = Rouge
D = Rose
E = Jaune
F = blanc
Les bordures
Citation : Correspondances caractères / borduresÍ = bordure horizontale
º = bordure verticale
É = coin supérieur gauche
È = coin inférieur gauche
» = coin supérieur droit
¼ = coin inférieur droit
Exemple
Code : Autre1
2
3
4
5
6
7
8
9
10
11
12
| @echo off
color F0
title Adresse ip et connexions actives
echo °adresse ip°
echo.
ipconfig
echo.
echo °connexions actives°
echo.
netstat
echo.
pause |
Les liens avec le C
Vous connaissez sans doute déjà cette instruction :
Code : C
Vous ne remarquez rien ? Allez, tout de même !
Secret (cliquez pour afficher)Eh oui !
pause est une commande batch !
En fait, quelle que soit la commande, elle fonctionne en C/C++...
Pas folle, la guèpe !
Créer un autorun
Bien, pour cela, il vous faudra faire deux choses :
- l'autorun à proprement parler en .inf
- le programme redirecteur en batch
Ainsi donc, la syntaxe de l'
autorun sera :
Code : Autre1
2
| [autorun]
open=prog_redirecteur.bat |
Ce n'est pas un fichier .bat mais .inf !
Et celle du programme redirecteur :
Code : Autre1
2
| @echo off
fichier_à_exécuter |
Enregistrez le tout sur un CD et vous avez votre
autorun !
Et voilà ! Vous avez avec ça de quoi vous amuser...
J'espère que ça vous aura plu...
Je ne pense pas avoir fait trop d'erreurs mais si vous en voyez, n'hésitez pas...
Merci,
++,
mleg
P.S. :
la liste de commandes dans ce tuto n'est pas exhaustive, bien entendu.
Ainsi, n'oubliez pas Merlin et son " /? " !