Le mode batch a toujours été présenté comme restreint. C'est sans doute le cas en comparaison des shells sous Unix.
Il est cependant possible de définir des sous-routines ou des fonctions en batch dos. C'est ce que nous allons voir.
Le premier cas présenté est celui de la sous-routine.
Elle se définie par un label, c'est à dire une ligne commençant par le caractère : suivi d'un nom.Elle se termine par la ligne goto:eof. En temps normal, cette ligne fait sortir du batch. Maissi on fait précéder l'appel de la sous-routine par call, il y aura un appel à la sous-routine età la fin de celle-ci le programme reprend où il en était.
C'est ce que montre l'exemple qui suit.
@echo off
echo appel de la fonction call:sous_routine echo apres appel
echo.&pause&goto:eof
::-------------------------------------------------------- :: section fonctions ::--------------------------------------------------------
:sous_routine echo. de la execution subroutine goto:eof
La sous-routine présentée, possède des limitations. On aime pouvoir passer des variables et écrire des fonctions. Dans le cas où l'on passe des variables par valeur, il suffit d'écrire sur la ligne du call les paramètres à passer. La limite est de 9 arguments.
Dans la fonction le premier paramètre s'appelle %~1, le second %~ et ainsi de suite. Ilseuvent alors s'utiliser comme n'importe quelle variable.
@echo off
echo appel de la fonction call:fonction argument1 argument2 echo apres appel
echo.&pause&goto:eof
::-------------------------------------------------------- :: Fonction avec passage par valeur les arguments sont :: %~1 %~2 %~3 %~4 .. ::--------------------------------------------------------
:fonction echo. de la execution subroutine echo. arguments : %~1 %~2 goto:eof
En batch en règle générale on utilise une variable globale que l'on affecte et qui revient modifié au programme principal. C'est le mode classique.
@echo off
echo avant appel de la fonction var = %var% call:fonction echo apres appel de la fonction var = %var%
echo.&pause&goto:eof
::-------------------------------------------------------- :: fonction changement de valeur classique ::--------------------------------------------------------
:fonction echo. de la execution subroutine set "var=valeur" goto:eof
Une façon élégante de faire est de passer le nom de la variable à modifier à la fonction. A l'intérieur de la fonction on ferra une affectation de la manière suivante:
set %~1=valeur.
@echo off
set var= echo avant appel de la fonction var = %var% call:fonction var echo apres appel de la fonction var = %var%
echo.&pause&goto:eof
::-------------------------------------------------------- :: fonction changement de valeur par reference ::--------------------------------------------------------
:fonction echo. execution de la subroutine
set %~1=valeur goto:eof
Il est possible d'utiliser des variables locales en définissant des sections
SETLOCAL ENDLOCAL
C'est un point que je développerai peut-être plus tard.