flecheFonctions

Les fonctions dans les scripts permettent d'augmenter considérablement les possibilités des batchs.

f Les étiquettes

f Fonction if

f Tests sur des fichiers

f Fonction choice

f Fonction for

f Fonction find

f Création d'un compteur

f Les paramètres


puceLes étiquettes

La fonction étiquette permet d'intervenir sur le séquencement, typiquement votre script va exécuter les commandes les une à la suite des autres. Pour casser tout ça les étiquettes permettent d'accédées directement à un endroit du script.

rem désactive l'affichage des commandes
echo off
rem remise à blanc de l'écran
cls
rem définition du point de retour
:boucle
rem affiche le texte salut
echo salut
rem indique de retourner à la :boucle
goto boucle

Ce script va afficher salut à l'infini, grâce à la boucle formée avec le saut qui fait un retour sur la directive :boucle.

 

puceLes SI avec la fonction IF / ELSE

La fonction If permet de définir une condition, ainsi il est possible de définir une comparaison qui fera accepter ou non la condition.

p Structures de la commande:

IF "chaine1" comparant "chaine2" (action)
IF "chaine1" comparant "chaine2" (action1) else (action2)

 

p Exemple:

IF toto EQU toto (echo la tete a toto)
IF toto EQU tata (echo la tete a toto) else ( echo toto différent de tata)

q L'ajout du paramètre /i permet d'ignorer la casse.

Les comparants utilisables sont:

EQU - égal à
NEQ - différent de
LSS - inférieur à
LEQ - inférieur ou égal à
GTR - supérieur à
GEQ - supérieur ou égal à

q Il est possible de comparer des chaînes de caractères ou bien des chiffres.

p Exemple :

Avec des SI ont pourrait mettre Paris en bouteille, démontrons que cela est possible.

echo off
cls
rem défini le point de retour
:boucle
rem définit une variable incrémentée de 1 à chaque passage
set /a count = count + 1
rem affiche la variable à chaque passage
echo %count%
rem SI %count% est égal à 10 alors aller au saut :fin
if %count%==10 goto fin
goto boucle
:fin
rem Insertion d'une une variable
echo Grace a des SI on mis %count% fois Paris en bouteille
pause

p Résultat:

Ici nous avons donc utilisé les SI afin de créer une condition pour sortir de la boucle.

 

puceTests sur des fichiers

Il est possible en batch de faire des tests sur des fichiers

p Test sur l'existence d'un fichier

echo off
cls
rem défini le point de retour
:boucle
rem définit une variable incrémentée de 1 à chaque passage
set /a count = count + 1
rem affiche la variable à chaque passage
echo %count%
rem SI %count% est égal à 10 alors aller au saut :fin
if %count%==10 goto fin
goto boucle
:fin
rem Insertion d'une une variable
echo Grace a des SI on mis %count% fois Paris en bouteille
pause

 

p Test sur la non-existence d'un fichier

rem désactive l'affichage des commandes
echo off
rem remise à blanc de l'écran
cls
rem test la présence du fichier temp.bat alors
rem afficher existe sinon afficher existe pas.
if not exist temp.bat (echo existe pas ) else echo existe
pause

 

puceLa fonction CHOICE

Comme son nom l'indique elle permet de faire un choix est d'être redirigé vers un saut.. Mais un exemple sera plus concret

! Attention la fonction CHOICE n'est pas disponible sur le système de base de Windows XP, pour résoudre ce problème il suffit d'installer Powerbatch il installe la commande en même temps que son programme.

 

dl

Echo off
:debut
cls

Echo Question: Quelle est la capitale de la suède ?
Echo .
Echo Réponse a: Olso
Echo Réponse b: Stokholm
Echo Réponse c: Reykjavik
Echo q: Quitter
rem la commande choice utilise une liste de paramètres ici abcq qui font
rem  référence à 4 niveau d'erreur a fait référence au 1
CHOICE /C:abcq Faites votre choix

IF %ERRORLEVEL%==1 goto a
IF %ERRORLEVEL%==2 goto b
IF %ERRORLEVEL%==3 goto c
IF %ERRORLEVEL%==4 goto q

:a
cls
echo Perdu ! la capitale de la suède n'est pas Olso mais Stokholm
GOTO Fin

:b
cls
echo Gagné ! la capitale de la suède est bien Stokholm
GOTO Fin

:c
cls
echo Perdu ! la capitale de la suède n'est pas Reykjavik mais Stokholm
GOTO Fin

:Fin
pause
goto debut
:q
 

puceLa fonction FOR

Cette fonction for permet de pouvoir parcourir un ensemble de lignes dans un fichier, et d'éxécuter des actions pour l'élément parcouru.

p Structure simple:

FOR /f %%variable IN (ensemble) DO commande

 

q On peut noter que les variables utilisées ici, ne sont pas de la forme %var%, mais de la forme %%a.

p Exemple:

@echo off
del temp.txt
rem création d'un fichier
echo 1 >> temp.txt
echo 2 >> temp.txt
echo 3 >> temp.txt
echo 4 >> temp.txt
echo 5 >> temp.txt

rem visualisation du contenu

echo le fichier temp.txt contient les lignes suivantes:
more temp.txt

echo.

echo Pour chaque ligne du fichier afficher son contenu
FOR /f %%i IN (temp.txt) DO (
echo ligne %%i
)
pause

 

for

 

p Structure "complèxe":

@FOR /f "tokens=2 delims=," %%a in (c:\data.txt) do (
@echo %%a

)
pause

 

Dans cette exemple nous ajoutons deux paramètres:

Tokens: Ce paramètre indique que la variable %%a prendra la deuxieme colonne du fichier c:\data.txt.

Delims: Ce paramètre indique que le délimiteur est la virgule, ce séparateur démilite en faite les colonnes du fichier c:\data.txt.

Pour pouvoir intérroger chaque colonne d'un fichier il faut modifier le paramètres "token". Si "tokens=1,2" alors un "echo %%a" ramera la valeur de la première colonne et un "echo %%b" ramenera la valeur de la deuxième colonne.

 

puceLa fonction FIND recherche dans un fichier, tableau

Grâce aux batchs il est possible à l'intèrieur d'un fichier texte de faire une recherche, à la fois sur une ligne et sur une colonne.

Tout d'abord il est préférable d'utiliser des fichiers possédant des séparateurs simples, comme par exemple les fichiers .cvs avec le délimiteur virgule.

fleche Fichier: c:\data.csv

1,pierre,martin
2,antoine,dupont
3,marcel,roger
4,thomas,froger
5,marie,simon
6,lea,robert
7,ines,bertrand
8,kenza,fournier
9,laure,richard

 

Sélection d'une ligne:

find "4" c:\data.csv
pause

fon

Grâce à au find nous avons sélectionné la ligne numéro 4.

 

p Sélection d'une colonne:

A l'aide, de la fonction FOR il est possible de sélectionner une colonne au sein d'un fichier avec délimiteur.

@FOR /f "tokens=2 delims=," %%i in (c:\data.csv) do @echo %%i
pause

q Il est possible avec la fonction FOR d'éxécuter plusieurs commandes dans le do, en intégrant des parenthèses après le DO.

Avec ce batch nous pouvons afficher la 2ème colonne du fichier don les réparateurs sont des ","

fon2

 

p Combinaison des deux:

dl

@echo off
rem définition de la variable var qui définie la place recherchée
set /p var=Quelle place cherchez-vous (1-9)?
rem enregistre dans le fichier tmp.txt la ligne contenant le numéro indiqué
find "%var%" c:/data.csv >> tmp.txt
rem dans le fichier tmp.txt sélection de la colonne 2 à 3, la colonne 2 %%i
rem la colonne 3 %%j
FOR /f "tokens=2-3 delims=," %%i in (tmp.txt) do @echo le numéro %var% est %%i %%j
del tmp.txt
pause

 

fon3

 

puceCréation d'un compteur

La création d'un compteur peut être très utile dans certaines situations, par exemple d'un compteur afin de temporiser. Ce dernier aura pour effet de retarder certaines commandes.

Il s'agit de créer une boucle à l'aide d'une étiquette incrémentant une variable ici %count%

rem temporistation
:boucle
set /a count = count + 1
if %count%==1000 goto finboucle
goto boucle
:finboucle

En jouant sur le seuil de déclenchement, ici "1000" nous pouvons faire varier la durée de la temporisation.

q Si vous possédez Windows Vista vous pouvez directement utiliser la commande timeout

 

puceLes paramètres

Découvrons désormais les paramètres, ce sont en fait des variables que nous pouvons que l'utilisateur peut introduire à l'éxécution du script. Mais voyons cela avec un exemple simple.

echo off
echo J'ai passé le paramètre : %1
pause

Ce micro script permet grâce à la variable %1 de récupérer le premier mot passé en paramètre au script. Comme vous l'aurez deviné %2 et le deuxième paramètre au script.

Mais regardons plutôt le résultat:

para

Et voilà rien de compliquer, mais cette fonction peut s'avérée utile dans certaines situations.

 

q Une question, une remarque, n'hésitez pas à visiter le forum

 

p Étape Suivante l'affichage