un exemple de variable transmise à un fichier batch lors de son lancement :
@echo off
REM ********************************************
REM ******** DEBUT COMMENTAIRES GÉNÉRAUX *******
REM ********************************************
REM nom du Batch : test_var.bat
REM but du batch : afficher une variable transmise lors de l'appel
REM ouaip j'aime bien les commentaires dans les prog
REM ********************************************
REM ******** FIN COMMENTAIRES GÉNÉRAUX **********
REM ********************************************
set var_toto=%1
REM on initialise la variable var_toto avec la 1ere valeur transmise au batch
REM lors de son appel (%2 = 2eme etc ... et %0 ? bah essayez ...)
echo %var_toto%
REM un simple echo de la valeur de la variable
REM ********************************************
REM ************** FIN DU BATCH ****************
REM ********************************************
Pour lancer le batch en ligne de commande on tapera :
test_var.bat titi
comme titi est le premier paramètre transmis au batch par la ligne de commande ça affichera :
titi
Remarque : dans un batch windows/dos les variables sont encadrées par des % pour leur utilisation ... L'initialisation par SET se fait sans les %
^^
@maximo446
Pour utiliser un fichier texte afin d'initialiser des variables une solution que je verrais serait d'utiliser une boucle "FOR" (perso j'aime bien FOR :)), déjà sous Windows il n'y a pas beaucoup de commandes ... Si quelqu'un voit une autre façon de faire sur un windows de base, je suis preneur ...
Imaginons un fichier texte appelé "fich_var.txt" contenant les mots :
vardetst1
vardetst2
vardetst2
papa
maman
labonne
etmoi
Pour lire le fichier txt dans le batch on utilisera au sein de la boucle "FOR" la commande "TYPE" :
@echo off
REM ********************************************
REM ******** DEBUT COMMENTAIRES GÉNÉRAUX *******
REM ********************************************
REM nom du Batch : test_var_fic.bat
REM but du batch : afficher des variables transmises par un fichier texte
REM ********************************************
REM ******** FIN COMMENTAIRES GÉNÉRAUX ********
REM ********************************************
for /F %%I in ('type fich_var.txt') do echo %%I
REM récupération et utilisation pour un simple echo (qui boucle) de la variable de FOR %%I
pause
REM ********************************************
REM ************** FIN DU BATCH ****************
REM ********************************************
On appellera directement test_var_fic.bat depuis la ligne de commande ou par double clic depuis l'explorer.
Depuis la ligne de commande :
test_var_fic.bat
On pourrait "s'amuser" à mélanger les 2 batches et passer à "test_var_fic.bat" le nom du fichier txt en paramètre. là, on aurait un "%1" qui pourrait initialiser une variable %txt_file% qui serait ensuite utilisé dans la commande TYPE transmise à la boucle FOR.
(...)
set txt_file=%1
for /F %%I in ('type %txt_file%') do echo %%I
(...)
et on pourrait même imaginer, ensuite, une boucle FOR lancée depuis la ligne de commande pour appeler le batch, un truc du genre :
for /F %I in ('dir /B *.txt') do call test_var_fic.bat %I
qui traiterait alors tous les .txt du répertoire.
Remarque : dans un batch pour les variables produites par la boucle "for" on doublera le % (%%I), contrairement à l'utilisation de la boucle "FOR" directement de la ligne de commande. Pourquoi ? Bah j'en sais rien, on va dire "parce que !", mais en tous cas 'c'est comme ça" ....
Puisqu'on joue avec les variables, une façon pratique de sortir d'une boucle FOR en batch Windows c'est d'utiliser les étiquettes et les CALL :). (Bah y'a pas forcement que des néophytes ...).
Exemple avec mon fichier texte "fich_var.txt" :
appel du batch depuis la ligne de commande par :
test_var_fic.bat fich_var.txt
@echo off
REM ********************************************
REM ******** DEBUT COMMENTAIRES GÉNÉRAUX *******
REM ********************************************
REM nom du Batch : test_var_fic.bat
REM but du batch : afficher des variables transmises par un fichier texte
REM ********************************************
REM ******** FIN COMMENTAIRES GÉNÉRAUX ********
REM ********************************************
set TXT_FILE=%1
for /F %%I in ('type %txt_file%') do call :etiq1 %%I
REM récupération et utilisation dans un call (dans la boucle) de la variable de FOR %%I
REM et transmission en parametre pour l etiquette
:etiq1
set var_qui_sert_a_rien=%1
echo %VAR_QUI_SERT_A_RIEN% %TXT_FILE%
REM mon %1 de l'appel de l'étiquette n'est pas mon %1 de l'appel du batch
pause
REM ********************************************
REM ************** FIN DU BATCH ****************
REM ********************************************
Concrètement, ça ne fait pas grand chose de plus :)
Au passage on notera quand même, que tout comme les commandes, les noms de variables ne sont pas sensible à la casse ...
Souvent les fichier de config des batches un peu compliqué sont dans des fichiers texte séparés, cela peut être une façon d'industrialiser les batches pour plusieurs environnements et d'initialiser une série de variable, surtout qu'un call peut aussi servir a appeler un autre batch ...
Avec FOR on peut incrémenter un compteur (option /L). traiter un .CSV de cette façon en utilisant les tokens, delims et autres options de cette commande, générer un fichier batch qui attaquera un client SQL pour insérer ces données ...
Une dernière pour la route, je scanne parfois les adresse IP de mon réseau local pour voir celles qui répondent depuis la ligne de commande ...
for /L %I in (1,1,255) do @ping -n 1 192.168.1.%I|find "temps"
J'aime bien les batches même si c'est "old fashion", en 2 mn c'est fait et quand on sait s'en servir c'est souvent mieux que de cliquer 10000 fois pour renommer des fichiers par exemple ... Les batches linux / unix sont juste 100 fois plus puissant que ceux de Windows, et puis il y a juste 100 fois plus de commandes ... mais y'a d'autres langage d'administration sous Windows qui permettent de compenser plus ou moins, et chaque nouvelle version apporte son lot d'options, de possibilités ou de nouvelles commandes amusantes. :)
J'étais venu ici car je ne me souvenais même plus de la syntaxe exacte d'une variable sous Windows ($ % ou autre ? :)) ... mais ça revient vite :) (c'était pour faire un batch pour demuxer, remuxer en ligne de commande (mkvtoolnix) toute une série d'épisodes d'une série en mkv dont la langue par défaut est l'anglais, et ma tv qui n'est pas assez maline pour me donner le choix de changer la langue alors ...) ;-)