Aller au menu - Aller au contenu

[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

Avatar
Auteur : mleg
Créé : le 14/12/2005 17:00:37
Modifié : le 28/01/2008 23:26:39
Noter et commenter ce tutoriel
Imprimer ce tutoriel
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 ? :)
Sommaire du chapitre :

Les bases

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... :euh:

Si ce n'est pas très clair, entrez ce code dans le Bloc-notes et compilez-le :

Code : Autre
1
2
echo off
pause


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 "

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 ! :p

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. :o

Donc, si vous avez suivi mon raisonnement, pour faire quelque chose de propre, il faut utiliser... o_O

Secret (cliquez pour afficher)
@echo off ! Bravo ! Image utilisateur


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... :p

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 :lol: ).
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.

Un peu plus en profondeur

Please... help !



Vous connaissez les fonctions de base. Ouvrez une invite de commandes et tapez la commande help.

Et... :magicien: !

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 : :magicien: !

N.B. (j'aime bien ça ^^ ) : avec ça, vous n'avez normalement plus besoin de mon aide... :p
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 :
netstat vous donne :
Perso, j'utilise souvent l'ipconfig pour connaître mon IP.

Notes sur certaines commandes utiles


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 : Autre
1
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 :
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 ? :waw:

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 : ping
Utilisation : 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.



Les variables en batch

La commande set



Les variables... les variables ? o_O

Non... eh bien si ! En batch aussi, il y a possibilité de déclarer des variables... :o

Rentrons dans le vif du sujet.

Par exemple :

Code : Autre
1
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 : Autre
1
2
3
4
5
@echo off
set /a note="14"
echo J'ai eu %note% en maths aujourd'hui ! (Non authentique ^^)
echo.
pause


Pour utiliser des nombres non décimaux (héxadécimaux ou de notation octale), utilisez :
  • 0xnombre pour les valeurs héxadécimales
  • 0nombre pour la notation octale.
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 : Autre
1
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... :euh:

Pour l'expliquer, je vais pomper dans " help set " ... :-°

Donc, essayez ce programme :

Code : Autre
1
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 ? o_O

Citation : help set
La 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 : Autre
1
2
3
@echo off
setlocal enabledelayedexpansion
pause


Puis, remplacez "%" par "!". Ainsi, le code final donne :

Code : Autre
1
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 ! o_O

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
1
2
echo.
pause


Par conséquent, enlevez le @echo off, le programme est bien moche mais au moins, on voit ce qu'on fait... :p

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 : Autre
1
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 : Autre
1
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 :
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 :
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 :

Ç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 : Autre
1
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...

Le design

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 / couleurs
0 = 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 : Autre
1
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

Annexe

Les liens avec le C



Vous connaissez sans doute déjà cette instruction :

Code : C
1
system ("pause");


Vous ne remarquez rien ? Allez, tout de même !

Secret (cliquez pour afficher)
Eh oui ! pause est une commande batch ! :o


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 :

Ainsi donc, la syntaxe de l'autorun sera :

Code : Autre
1
2
[autorun]
open=prog_redirecteur.bat


Ce n'est pas un fichier .bat mais .inf !

Et celle du programme redirecteur :

Code : Autre
1
2
@echo off
fichier_à_exécuter


Enregistrez le tout sur un CD et vous avez votre autorun ! ^^

Q.C.M.

Quelle extension n'est pas valide pour compiler ?
Que fera ce programme ?

Code : Autre
1
del fichier.type
Quelle instance de if n'est pas valide ?
Qu'est-ce qui va permettre au programme de fonctionner correctement ?

Code : Autre
1
2
3
4
5
6
7
8
setlocal enabledelayedexpansion 
set perso=vivant 
if "%perso%"=="vivant" ( echo BLAM...
set perso=mort 
if "%perso%"=="mort" echo Game Over 
) 
echo. 
pause
Quelles seront les couleurs affichées ?

<code>
color F2
</code>


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 " /? " ! :magicien:
Auteur : mleg
Noter et commenter ce tutoriel
Imprimer ce tutoriel

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 67 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0931s (0.0797s)