[Batch] créer une variable

jebok Messages postés 371 Date d'inscription   Statut Membre -  
ryko1820 Messages postés 1633 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

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

--
Merci de votre aide

7 réponses

  1. awfr0812 Messages postés 3 Statut Membre 91
     
    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.
    86
  2. java1
     
    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++
    30
  3. ryko1820 Messages postés 1633 Date d'inscription   Statut Membre Dernière intervention   310
     
    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 ...) ;-)
    17
  4. DavToN
     
    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
    4
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. awfr0812 Messages postés 3 Statut Membre 91
     
    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.
    2
  7. maximo446 Messages postés 318 Statut Membre 27
     
    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
    1
  8. Sheraf Messages postés 262 Statut Membre 48
     
    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
    -5