Apprendre le Batch :
Traitement des variables
Ce chapitre vous permettra enfin de comprendre à quoi servent les variables numériques

Il va encore ne faire que parler de 'SET' car il s'agit d'une commande très puissante qui a besoin d'être expliquée en détail.
Il va être scindé en trois parties : les opérations arithmétiques pour les variables numériques, quelques opérations sur les variables qui contiennent des chaines de caractères et un exercice pour s'entraîner.
1) Opérations arithmétiques basiques
Prenons un exemple : demander à l'utilisateur son âge.
@echo off
SET /p age_utilisateur=Quel age avez-vous en années :
pause>nul
Mettons que ça lui ferait plaisir de perdre quelques années, disons 10 ans

On sait que dans la variable
age_utilisateur nous avons un nombre auquel nous allons devoir soustraire 10 car nous voulons lui faire perdre 10 ans, d'accord ?
Pour ça 2 solutions :
-
Soit on modifie notre variable (déconseillé généralement car il peut être intéressant de toujours garder l'original) :
age_utilisateur =
age_utilisateur - 10
-
Soit on en crée une nouvelle (meilleur solution) :
age_modifie =
age_utilisateur - 10
Le code pour la 1ère solution :
set /p age_utilisateur=Votre age :
REM On enlève 10 :
set /a age_utilisateur = age_utilisateur - 10
Le code pour la 2ème solution :
set /p age_utilisateur=Votre age :
REM On enlève 10 dans une nouvelle variable :
set /a age_modifie = age_utilisateur - 10
Dans tous les cas,
n'oubliez surtout pas le /a, sinon ça ne peut pas marcher, enfin du moins ça donnera n'importe quoi et le pauvre gars qui utilise le programme va se poser des questions
Sachez que pour la première solution, il existe un raccourci, au lieu d'écrire deux fois la variable, on peut faire ceci :
set /p age_utilisateur=Votre age :
REM On enlève 10 :
set /a age_utilisateur -= 10
J'ai mis en rouge
l'opérateur d'attribution, il est constitué d'un signe moins devant, c'est une technique plus rapide et plus lisible. A vous de choisir.
Maintenant que vous avez compris le principe, vous vous doutez bien que les opérations basiques sont toutes possibles comme l'addition, la soustraction (dont nous venons de traiter dans tout l'exemple pour ceux qu'auraient pas encore compris

), la multiplication et la division.
Je vais les représenter dans un exemple :
@echo off
REM On déclare un nombre qui sera toujours égal à 100
set /a nombre = 100
REM On déclara une variable qui utilise la division :
set /a nb_div = nombre / 20
REM Ca revient à : nb_div = 100 / 20 = 5
REM On déclara une variable qui utilise l'addition :
set /a nb_add = nombre + 10
REM Ca revient à : nb_add = 100 + 10 = 110
REM On déclara une variable qui utilise la multiplication :
set /a nb_mul = nombre * 2
REM Ca revient à : nb_mul = 100 * 2 = 200
pause>nul
Voila, donc c'est pas bien compliqué, voyez !
N'oublions pas les opérateurs d'attribution pour
la division,
l'addition et
la multiplication, respectivement :
/=,
+= et
*=.
Vous pouvez utiliser des parenthèses afin de mettre vos propres priorité car les priorités arithmétiques sont les mêmes qu'en math (oui oui, la multiplication et la division sont prioritaire, pour ceux qui auraient oublié..) .
Encore un exemple :
@echo off
set /a mega_operation = -28,3 * (55 + 21)
echo %mega_operation%
pause>nul
Résultat :
-304
Je ne vous ai pas parlé des nombres à virgule, laissez-les tomber, ils ne sont pas gérés ou très mal.
Enfin pour clore cette partie, je ne vous parlerais pas des opérateurs bits à bits, car je les estime inutiles (personnellement je m'en suis servi qu'une seule fois de ma vie et encore c'était pour un projet très particulier..). Mais ceux qui sont intéressés qu'ils n'hésitent pas.
2) Opérations sur les chaines de caractères.
Dans cette partie, nous allons voir comment traiter les chaines de caractères.
C'est toujours utile de savoir ça
Nous prendrons comme référence cette phrase : "
Le petit chien noir est perdu !".
D'abord je vais vous expliquer comment sont comptés les caractères sinon vous comprendrez rien à la suite

Le premier caractère d'une chaine de caractère est toujours 0, le deuxième caractère est 1 et ainsi de suite ..
Ce qui donne dans notre phrase :
'
L' : Caractère n° 0.
'
e' : Caractère n° 1.
'
' (espace) : Caractère n° 2.
'
p' : Caractère n° 3.
'
e' : Caractère n° 4.
...
'
d' : Caractère n° 28.
'
u' : Caractère n° 29.
'
' : Caractère n° 30.
'
!' : Caractère n° 31.
A partir de là, on peut y aller.
a) Remplacement d'une ou plusieurs occurrences
Voici la commande :
set variable=%variable:occurrence=remplacement%
Explication :
variable : Donc ça n'a toujours pas changé, c'est le nom de votre variable, la variable affectée peut être différente de la variable affectante, ça ne pause pas de soucis (ex:set new_var=%var:x=y%).
occurrence : C'est la chaine à rechercher dans votre chaine de caractère. Si elle commence par une astérisque '
*', elle ne sera remplacé que par la première occurence en partant du début.
remplacement : C'est la nouvelle chaine qui va remplacer toutes les occurrences de la chaine précédente.
Exemple :
@echo off
REM On définit notre variable
set chaine=Le petit chien noir est perdu !
REM Et on la modifie : on remplace chien par chat
set new_chaine=%chaine:chien=chat%
echo %new_chaine%
pause>nul
Résultat :
Le petit chat noir est perdu !
On peut le faire avec une seule lettre aussi :
@echo off
REM On définit notre variable
set chaine=Le petit chien noir est perdu !
REM Et on la modifie : on remplace e par a
set new_chaine=%chaine:e=a%
echo %new_chaine%
pause>nul
Résultat :
La patit chian noir ast pardu !
b) Sélectionner une partie de la chaine
Voici la commande :
set variable=%variable:~nombre1,nombre2%
Explication :
variable : Pareil que précédemment.
nombre1 : La sélection commence à partir de tant de caractères. Si nombre1 est négatif, alors la sélection commence à partir de la fin, sinon elle commence à partir du début. C'est pour nombre1 que je vous faisais l'explication du décomptage de caractère dans une chaine.
nombre2 : Nombre de caractères à sélectionner. Option non obligatoire auquel cas la sélection se ferait automatiquement jusqu'à la fin. S'il est négatif alors la sélection se ferait sans ces caractères en partant de la fin, s'il est positif elle ne sera constitué que de ces caractères.
Quelques exemples pour bien comprendre :
Exemple 1 :
@echo off
REM On définit notre variable
set chaine=Le petit chien noir est perdu !
REM Et on la modifie : on sélectionne à partir du 4ème
REM caractère et on sélectionne 8 caractères.
set new_chaine=%chaine:~3,8%
echo %new_chaine%
pause>nul
Résultat :
petit ch
Exemple 2 :
@echo off
REM On définit notre variable
set chaine=Le petit chien noir est perdu !
REM Et on la modifie : on sélectionne à partir du 10ème
REM caractère en partant de la fin et on sélectionne 4 caractères.
set new_chaine=%chaine:~-10,4%
echo %new_chaine%
pause>nul
Résultat :
st p
Exemple 3 :
[code=batch]@echo off
REM On définit notre variable
set chaine=Le petit chien noir est perdu !
REM Et on la modifie : on sélectionne à partir du 5ème
REM caractère et on supprime 10 caractères en partant de la fin
set new_chaine=%chaine:~5,-10%
echo %new_chaine%
pause>nul
Résultat :
tit chien noir e
Je pense que ça suffira
Maintenant que nous savons tout ça, je vous propose un petit exercice pour terminer avec de la pratique.
3) Exercice : Transformateur de texte
Héhé, un exercice qui a pour but de résumer un peu tout, ça vous fera pas mal tas de mollassons !
L'objectif : Vous entraîner et vous faire un peu souffrir après ce que j'ai enduré
Le principe : Je vais vous donner un texte assez court et vous allez devoir le mettre entièrement en majuscule. Facile, non ?
Le texte :
Les frites sont des pommes de terre coupees en morceaux allonges et cuites en friture, autrefois dans de la graisse de boeuf et depuis plutot dans de l'huile d'arachide, de preference dans une machine dediee (celle-ci appelee friteuse).
ALLEZ GO ! Au travail !
La solution :
--
--
--
Vous avez déjà fini ?
--
--
--
--
--
Sûr ?
--
--
Ok, voilà la solution (écrite en petite, recopiez-la dans votre bloc-notes plutôt pour pas vous dégommer les noeils) :
@echo off
REM On définit notre variable
set texte=Les frites sont des pommes de terre coupees en morceaux allonges et cuites en friture, autrefois dans de la graisse de boeuf et depuis plutot dans de l'huile d'arachide, de preference dans une machine dediee (celle-ci appelee friteuse).
REM On met chacune des minuscules en majuscules
set texte=%texte:a=A%
set texte=%texte:b=B%
set texte=%texte:c=C%
set texte=%texte
=D%
set texte=%texte:e=E%
set texte=%texte:f=F%
set texte=%texte:g=G%
set texte=%texte:h=H%
set texte=%texte:i=I%
set texte=%texte:j=J%
set texte=%texte:k=K%
set texte=%texte:l=L%
set texte=%texte:m=M%
set texte=%texte:n=N%
set texte=%texte:o=O%
set texte=%texte
=P%
set texte=%texte:q=Q%
set texte=%texte:r=R%
set texte=%texte:s=S%
set texte=%texte:t=T%
set texte=%texte:u=U%
set texte=%texte:v=V%
set texte=%texte:w=W%
set texte=%texte:x=X%
set texte=%texte:y=Y%
set texte=%texte:z=Z%
REM Et on affiche le résultat
echo Voici le nouveau texte en majuscules :
echo %texte%
pause>nul
Voilà pour ce chapitre, n'hésitez pas à faire des essais chez vous