[Batch] créer une variable [Fermé]

Signaler
Messages postés
375
Date d'inscription
lundi 16 mai 2005
Statut
Membre
Dernière intervention
23 octobre 2007
-
Messages postés
1642
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
5 mai 2020
-
Bonjour,

je souhaite créer une variable locale dans un fichier .bat
Comment m'y prendre ?

7 réponses

Messages postés
3
Date d'inscription
mardi 26 janvier 2010
Statut
Membre
Dernière intervention
29 avril 2011
89
Hello,
pour compléter:

"/a" est obligatoire pour stocker des nombres et pouvoir faire des calculs:
set /a variable=valeur_numérique

pour faire saisir quelque chose à l'utilisateur on utilise "/p":
set /p variable=texte d'invitation: 

la saisie sera considérée comme du texte. Si jamais on veut faire saisir des nombres on fera par exemple:
set /p age=veuillez taper votre age: 
set /a age=%age%


sinon vous pouvez faire suivre "/?" au nom de toute commande pour obtenir une aide (= les options possibles et parfois des exemples d'utilisation):
commande /?

à bientôt.
84
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 61797 internautes nous ont dit merci ce mois-ci

Salut jebok
Pour définir une variable il faut effectivement passer par SET :
set variable="" >si tu veut lui assigner une valeur
set variable=valeur >si tu veut lui assigner une valeur
set variable=%variable2% >si tu veut lui assigner une autre variable
En fait entre deux % c'est une variable et unseul % c'est un paramètre
Tu ne peut définir que 9 paramètres dans un batch sinon il faut les écraser (SHIFT)
En espérant que ça t'aidera
A++
Messages postés
1642
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
5 mai 2020
240
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 ...) ;-)
Salut si tu veut apprendre à créer des variables en Batch visite le site du zéro. Va dans les tutos des zéro et lit bien. Il faut assi avoir quelque notion en batch. DavToN
Messages postés
3
Date d'inscription
mardi 26 janvier 2010
Statut
Membre
Dernière intervention
29 avril 2011
89
Hello,

La commande Type permet d'afficher le contenu d'un fichier (éditable), sachez qu'on ne peut stocker plus d'une ligne dans une variable. Vous pouvez utiliser For pour faire vos sélections.

Toujours pareil for/? pour un peu d'aide (sorte de man) et biensûr help vous donnera une liste de la majeure partie des commandes disponibles.

à bientôt.
Messages postés
273
Date d'inscription
lundi 26 octobre 2009
Statut
Membre
Dernière intervention
5 novembre 2014
24
moi je voudrait que la variable soi ce qui est ecrit dans un fichier text

jai assayer ceci>

set var=directory.txt
takeown /f %var%

mais il prend le nom du .txt mais pas ce qui est ecrit dans le .txt
Messages postés
261
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
10 juin 2009
47
Bonjour,

Grosso modo ca doit ressembler à ca :
SET %i = 1

je ne sais plus exactement comment ca fonctionne,mais je sais qu'il faut passer par la commande SET. Tu auras toutes les explications en faisant SET /?.
Tape SET tout court et tu auras toutes les variables prédéfinies.

Cdlt