Accueil HGL (général) Articles de blog Articles de blog (filtre : programmation)  

Hugoland - programmation (archives)

Décomposition de variables

Première publication : 6 avril 2015
			Salut, je vais essayer de faire un tuto assez clair avec des exemples divers
Ce dont on a besoin :
(mettez ces 4 morceaux codes, morceau après morceau, dans un même fichier .bat)
- Une introduction au code
	
@echo off
:: Tutoriel
color a
	

- Des définitions de variables
	
set var1=j'
set var2=aime
set var3=le
set var4=batch

set variable=%var1%;%var2%;%var3%;%var4%
cls
	

- De l'affichage de ces variables
	
echo %var1%
echo %var2%
echo %var3%
echo %var4%
echo Ce qui donne %variable%
	

- D'une boucle FOR et d'une PAUSE
	
for /f "tokens=1,2,3,4 delims=;" %%A in ("%variable%") do (
	echo %variable% = %%A%%B %%C %%D
)
pause
	

Intéressons nous au FOR.
Prenons une illustration simple!
un mur de briques.
La variable est ce mur. Il est composé de mots qui sont les briques.
Les ; délimitent les mots: c'est le béton qui scelle les briques.
Mais on veut casser ce mur, pour obtenir les briques!
Illustration

Simple vu comme ça ! Dans for, ce qui est compliqué au début, c'est cette foutue syntaxe! On ne sait pas où mettre les mots clés tokens, delims, eol, useback et skip, encore mois les utiliser. Reprenons notre mur! Delims est l'outil qui va casser le béton, et tokens sont les supports des briques, les surfaces sur lesquelles on va poser ces briques. Delims=; Ceci identifie le béton qu'il faut casser, on doit casser les qui délimitent les briques (pas un hasard si ça s'appelle delims...) Tokens=1,2,3,4 Ceci "fabrique" les supports de briques, on a là 4 briques. Si vous voulez que les briques en trop soient empilées dans la dernière variable, vous pouvez faire 1,2,* par exemple, et %%C contiendra les 2 dernières. Mais concrètement en batch ça donne quoi? Eh bien on invoque 4 tokens qui vont ensuite dans l'ordre. On déclare une variable avant d'écrire IN, ce sera le premier token. %%A Mais on en veut 4. %%B -> 2e %%C -> 3e %%D -> 4e Ces 3 dernières sont déclarées automatiquement. Le traitement FOR invoque ces variables comme suit: %%A = j' %%B = aime %%C = le %%D = batch Logique. Mais sorti de la boucle fore ces variables ne fonctionnent plus (essayez donc de faire echo %%A après la parenthèse qui met fin à la boucle for...) Essayons un autre script, cette fois ci vous devez rentrer ces mots, c'est vous qui taillez les briques! @echo off color a :1 cls set /p var1=Entrez un mot set /p var2=Entrez un mot set /p var3=Entrez un mot set /p var4=Entrez un mot set variable=%var1%;%var2%;%var3%;%var4% echo On obtient ces briques %var1% %var2% %var3% %var4% echo et ce mur %var1%;%var2%;%var3%;%var4% pause cls for /f "tokens=1,2,3,4 delims=;" %%A in ("%variable%") do ( echo Le mur: %variable% echo ses briques une fois éclaté: echo %%A echo %%B echo %%C echo %%D ) pause goto 1 Bon voilà un joli code Voici une horloge qui décompose %time% Entraînez vous à comprendre ce code, où sont les briques, quel est le béton. @echo off color a cls :for title HEURE for /f "tokens=1,2,3 delims=:" %%H in ('echo %time%') do ( set t1=%%H set t2=%%I set t3=%%J ) for /f "tokens=1,2 delims= " %%K in ('echo %t3%') do ( set t4=%%K set t5=%%L ) cls echo Il est %t1% heures, %t2% minutes, %t4% secondes et %t5%0 millisecondes. goto for

Notes 2024 :

Le tutoriel ci-dessus a été écrit vers la fin de mes 14 ans sur un forum désormais inaccessible. Je l'ai laissé ici tel que je l'avais écrit à l'époque. Cependant quelques ajouts utiles : - il est possible de spécifier plusieurs symboles dans le paramètre delims (par exemple delims=;,:) - l'espace est compliqué à gérer dans cette méthode, le meilleur moyen pour réussir à prendre l'espace est (comme dans le dernier code du tutoriel) de mettre delims= " avec l'espace en toute fin, de manière à ce que l'espace soit juste avant le guillemet refermant du groupe de paramètres - concernant ce qu'on met entre parenthèses après le in : in ('commande à exécuter') // in ("texte traité comme tel") // in (fichier.txt) - on peut remplacer tokens=1,2,3,4 par tokens=1-4