Vous êtes sur la page 1sur 27

Rapport sur :

Script batch
Realis par:Naima El Mabrouki Soukaina Haibour Encadr par:

 Introduction  Varaiable denvironnement  Tests  Boucles

 Variables denvironnement
Ce sont des chanes de caractres stockes en mmoire vive. Elles sont utilises par le DOS et dautres utilitaires afin de dfinir leur fonctionnement. Par exemple :  DIRCMD influence le comportement de la commande dir.  COPYCMD influence le comportement de la commande copy. copy.  PROMPT dfinit le format de linvite du DOS
 PATH fournit la liste des chemins daccs aux fichiers excutables.

Les variables denvironnement peuvent galement tre utilises par les fichiers batch, principalement de deux manires :  Extraire certains renseignements concernant le DOS ou le PC, en fonction des variables d'environnement prdfinies telles que path, prompt, temp, ...  Crer, modifier ou tester des variables denvironnement indpendantes du DOS, pour les besoins particuliers dun fichier batch.

Cration / suppression la cration dune variable denvironnement se fait avec la commande set : set NomVariable=Contenu de la variable La suppression est faite ainsi : set NomVariable= Dans le nom et le contenu des variables denvironnement, les espaces sont autoriss. Emploi L'emploi des variables d'environnement est trs semblable celui des paramtres des fichiers batch, deux diffrences prs :  Le nom peut avoir plusieurs caractres  Le signe "pour-cent" doit tre plac au dbut et la fin du nom de la variable. Par exemple, pour afficher les chemins de recherche : echo %path%

REM REM dbute toute ligne place dans un batch comme commentaire. Cest la manire classique de dfinir des commentaires. La commande REM doit toujours dbuter une ligne. Elle ne peut en aucun cas tre place aprs une instruction.

 Test
Un test, c'est la possibilit d'excuter un traitement si le rsultat comparant deux lments est vrifi. Trois catgories de tests existent avec les fichiers batch :
 Prsence ou absence dun fichier  Egalit ou ingalit de deux chanes de caractres  Code derreur rsultant de la commande prcdente.

Il est engendr par la commande "IF" dont voici ces paramtres et sa structure : IF [NOT] ERRORLEVEL nombre commande IF [NOT] chane1==chane2 commande IF [NOT] EXIST fichier commande

NOT

Spcifie que linterprteur excute la commande seulement si la condition est fausse Condition vraie si le dernier programme excut a renvoy un code de sortie suprieur ou gal au nombre spcifi. Commande excuter si la condition est satisfaite. Condition vraie si les chanes spcifies concordent. Condition vraie si le fichier spcifi existe. @echo off IF "%1"=="" GOTO Err Echo Le paramtre est : "%1" Goto Fin :Err Echo Entrez un paramtre. :Fin

ERRORLEVEL nombre

Commande Chane1==chane2 EXIST fichier

Exemple de code

LABELS Un label est un nom prcd du signe "deux-points". Le nombre de caractres autoris est quelconque; cependant, le DOS ne tient compte que des huit premiers. En outre, n'utiliser que les caractres habituellement autoriss.est un marqueur dsignant une ligne dans un fichier de commande. Un label est utilis de paire avec la commande de branchement "GOTO". Un label commence par un caractre deux points, suivit d'un nom. Exemple :
@Echo Off ... ... Goto L1 ... ... :L1 ... ...

Lorsque l'interprteur rencontre la commande "GOTO L1", il poursuit sont interprtation aprs la ligne dsigne par le label (il saute au label).

Existence dun fichier SYNTAXE: if [not] exist [chemin]fichier Action Si le fichier spcifi existe [ou pas], laction est excute. Sinon, le droulement du batch reprend simplement la ligne suivante. Egalit de deux chanes de caractres SYNTAXE if [not] chaine1 == chaine2 Action Si les deux chanes de caractres sont strictement gales [ou pas], l'action est excute. Sinon, le droulement du batch reprend simplement la ligne suivante. Les majuscules et les minuscules interviennent. Ce test permet de vrifier les valeurs des paramtres. Attentions alors au fait que les paramtres peuvent tre vides, ce qui peut donner lieu, en labsence de prcaution, une situation problmatique.

Les codes d'erreur Certaines commandes du DOS de mme que des utilitaires externes au DOS gnrent, la fin de leur excution, une valeur interne appele errorlevel. Cette valeur n'est pas affichable, mais elle peut tre teste dans un fichier batch. La signification de cette valeur dpend de la commande ou de l'utilitaire concern. Cependant quelques grandes lignes sont la plupart du temps respectes; ce sont :  Valeur gale 0 si tout s'est bien pass, donc pas d'erreur.  Valeurs croissantes partir de 1 pour des erreurs en principe de plus en plus graves. La croissance ne se fait pas toujours avec un pas de 1. Consulter l'aide de la commande dont l'errorlevel est tester pour plus de prcision. SYNTAXE if [not] errorlevel Valeur Action Si le code gnr par la commande prcdente est gal ou suprieur la valeur spcifie (0..255), lAction est excute. Sinon, le droulement du batch reprend simplement la ligne suivante.

Le fait que le test utilise la condition "plus grand ou gal" oblige toujours tester les plus grandes valeurs en premier, en tenant compte de la valeur maximale de l'errorlevel en fonction de la commande utilise. effective. Ce peut galement tre un moyen de distinguer diverses situations auxquelles la commande en question est confronte. Ainsi il existe des utilitaires qui donnent un code correspondant au jour de la semaine, au quantime du mois, .... Un exemple typique de code ne correspondant pas une erreur est la commande choice, pour laquelle les codes gnrs indiquent quelle touche a t presse. Choice Choice dfinit un code d'erreur correspondant la touche presse par l'utilisateur, en rponse une question ou comme choix dans un menu. Par dfaut, les touches O (Oui) et N (Non) sont autorises. Elles donnent les codes 1 (Oui) et 2 (Non). Toujours par dfaut, toutes les autres touches sont interdites. Leur appui provoque un bip et c'est tout.

On peut autorises d'autres touches avec le commutateur /Cxyz.... Le nombre de touches maximal doit tenir compte du fait que la ligne de commande ne peut pas dpasser 127 caractres. Le code correspondant chaque touche est dfini pas la position de la lettre (touche) la suite du commutateur /C. Ainsi : choice /Cqics donnera la correspondance suivante : Touche Errorlevel Q q i C 1 1 2 3

S 4 s 4 La suite du batch devrait procder l'aiguillage du droulement en fonction de la touche presse, par exemple de la manire suivante :

... echo Votre choix ? choice /Cqics if errorlevel 4 goto Sauver if errorlevel 3 goto Charger If errorlevel 2 goto Imprimer goto Quitter

% Touches autorises % % Aiguillage %

...  Boucles Une boucle, c'est la possibilit de rpter plusieurs fois une opration sur un lment d'un ensemble dfinit. Souvent, l'ensemble est dfini avec les noms de fichier, mais il peut aussi tre du texte, voir des paramtres. Cette boucle est engendre par la commande "FOR" FOR %variable IN (ensemble) DO commande [paramtre]

%variable

Paramtre remplaable.

(ensemble)

Ensemble de fichiers spars par des espaces.

Commande

Commande excuter pour chaque fichier.

paramtre

Paramtres ou commutateurs pour la commande spcifie.

Pour utiliser FOR dans les fichiers de commandes, spcifiez %%variable au lieu de %variable.

SANS FIN Dans ce cas, un simple goto permettre une squence d'tre rpte sans arrt, c'est--dire jusqu' ce qu'un vnement externe se produise. La structure est la suivante : :SansFin ... % Diverses instructions %

goto SansFin Avec condition d'arrt La condition d'arrt peut tre place en dbut de boucle: on a alors une structure de type "Tant que quelque chose est vrai faire ...". Cette structure est caractrise par le fait qu'il est possible que la boucle ne soit jamais excute, selon les conditions initiales, c'est--dire si la condition est fausse ds le dpart.

A l'inverse, il peut tre souhaitable que l'on fasse quelque chose au moins une fois, ce qui est le propre de la structure "Rpter ... jusqu' ce que la condition soit vraie". Ici, la condition est place en fin de boucle, ce qui fait que cette dernire sera toujours excute au moins une fois. Le choix d'une structure plutt qu'une autre dpend des circonstances. Le bon choix conduit souvent un batch plus court, donc plus rapide. S'il existe, dans les langages volus tels que Pascal, C, Basic et autres, des structures prdfinies avec mots-cls, ce n'est pas le cas avec les fichiers batch : il faut tout faire avec goto et if ... judicieusement placs videmment. La forme gnrale des deux structures est illustre ci-dessous. Dans ces deux exemples, la boucle est rpte aussi longtemps que le paramtre 1 n'est pas vide. La version TantQue ne donnera lieu aucun passage dans la boucle si le paramtre 1 est vide ds le dpart, contrairement ce qui se passera avec la version JusquA, dans laquelle il y aura de toute manire au moins un passage dans la boucle.

FORME GNRALE DE LA BOUCLE TANT QUE :TantQue if "%1" == "" goto Suite :: :: Contenu de la boucle Tant Que :: goto TantQue :Suite ...

FORME GNRALE DE LA BOUCLE JUSQU'A :JusquA :: :: Contenu de la boucle Jusqu'A :: if not "%1" == "" goto JusquA :Suite ... Prdfinie La rptition est automatique, sans commande goto, de part la structure mme de la boucle. Elle est mise en uvre avec la commande for.

SYNTAXE for %%V in (ensemble de valeurs) do Commande [%%V] L'ensemble de valeurs peut tre de diverses natures: LISTE DE COMMANDES Avec la ligne suivante : for %%C in (echo shift goto:Loop) do %%C Coucou on aura une excution identique celle d'un batch tel que : echo Coucou shift Coucou goto:Loop Coucou Mais comme la commande shift n'attend aucun paramtre, Coucou est ignor.

De mme, la commande goto ayant dj son paramtre (Loop), Coucou est galement ignor. Les deux points entre goto et Loop sont interprts comme un espace par DOS, donc la commande goto est excute normalement. Pour for, les deux-points sont interprts comme un caractre quelconque, ce qui est indispensable pour que for voit goto loop comme un tout et pas comme deux commandes distinctes. LISTE D'EXTENSIONS Avec la ligne suivante : for %%E in (bat doc xls a51 c) do copy *.%%E a:\ on aura une excution identique celle d'un batch tel que : copy *.bat a:\ copy *.doc a:\ copy *.xls a:\ copy *.a51 a:\ copy *.c a:\

LISTE DE CHANES QUELCONQUES Avec la ligne suivante : for %%C in (a bc def ghij lk n) do copy bidon.txt %%C.%%C on ralisera 6 copies du fichier bidon.txt nommes respectivement : a.a bc.bc def.def ghij.ghi lk.lk n.n afin d'avoir des fichiers sans importances pour mener bien des manipulations sur un ensemble de fichiers.

CARACTRES DE REMPLACEMENTS Dans tous les exemples prcdents, seuls les caractres habituellement autoriss pour les noms de fichiers du DOS ont t employs. Il est galement possible de mettre comme ensemble de valeurs des chanes comportant des caractres de remplacements tels que ? et *. Le comportement de la boucle for est alors quelque peu diffrent. Dans ce cas , la commande qui suit le do est rpte pour chaque fichier correspondant au masque d'identification et qui se trouve dans le rpertoire courant ou dans celui spcifi. Un masque d'identification est une chane contenant des caractres de remplacements, de manire dsigner en une seule fois un ensemble de fichiers. Ainsi le masque t*.doc permet de faire rfrence tous les fichiers dont le nom commence par t, dont l'extension est doc et qui se trouvent dans le rpertoire courant. Avec la commande suivante : for %%F in (*.txt) do find "hello" /i %%F

la recherche de la chane hello sera effectue dans tous les fichiers du rpertoire courant ayant l'extension txt, ce que ne permettrait pas la commande find elle seule. Oprateurs EQU gal NEQ diffrent de LSS infrieur LEQ infrieur ou gal GTR suprieur GEQ suprieur ou gal

Commande IF If condition (commande) If condition (commande) Else (autre commande) Plusieurs commandes peuvent tre excutes si elles sont mises entre parenthses. If "<condition>"=="<valeur>" <action> Il est important de : Toujours encadrer la condition et la valeur tester par des guillemets, De veiller utiliser, lors d'un test, le double signe gal (== au lieu de =)