Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[R]Une variable dans une variable
Auteur Message
Répondre en citant
Message [R]Une variable dans une variable 
Bonjour,
J'ai un problème qui m'arrive souvent dans plusieurs programmes
On a plusieurs variables qui sont définies
Code:

set var1=hello
set var2=bonjour
set var3=bonsoir
set var4=allume
set var5=eteind

et puis j'ai ce genre de chose
Code:

:loopstatutallume
set /a nbr=%nbr%+1
if %var%nbr%%==allume set couleursegment%nbr%=%couleurallume%
if %nbr%==10 goto affichage
goto loopstatutallume

voilà donc au lieu de faire ca
Code:

if %var1%==allume set couleursegment1=%couleurallume%
if %var2%==allume set couleursegment2=%couleurallume%
if %var3%==allume set couleursegment3=%couleurallume%
if %var4%==allume set couleursegment4=%couleurallume%
if %var5%==allume set couleursegment5=%couleurallume%


c'est cette partie du code qui marche pas...

Code:

if %var%nbr%%==allume set couleursegment%nbr%=%couleurallume%


Si quelqu'un savait m'aider ...

Merci d'avance



Dernière édition par programme le Ven 30 Déc 2016 - 18:36; édité 1 fois

______________________________________________________

Programme
Skype
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [R]Une variable dans une variable 
Lis ceci, ça pourrait t'intéresser!
TSnake a tout dit ici http://batch.xoo.it/t5583-Setlocal.htm
Et voilà un message de ma part pour plusieurs utilisations de setlocal http://batch.xoo.it/t5337-C-est-sert-a-quoi-les.htm#p40203




______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :

Hugo7, sans faire exprès... a écrit:
Il conviendra de [...] supprimer le panneau de la liste des panneaux présente dans une variable liste dans la liste des variables.
Visiter le site web du posteur Skype
Répondre en citant
Message [R]Une variable dans une variable 
Ce que tu veux faire c'est utilisé des variables dynamiques Mr. Green
Le Batch permet justement de faire cela Okay


Pour créer une variable dynamique : il n'y a aucun problème
Pour lire une variable dynamique : Un petit problème s'impose Laughing



En fait, il faut utiliser les ! pour lire les variables dynamiques ou tout autres variables
Pour utiliser les !, il faut activer l'extension retardée comme ceci :
Code:
setlocal EnableDelayedExpansion

Pour en savoir + :


Donc dans ton cas, cela devrait donner quelques choses comme ça :
Code:
@echo off
setlocal EnableDelayedExpansion
title Dynamic Variable
set /a nb=1

set couleurallume=vert
set var1=hello
set var2=bonjour
set var3=bonsoir
set var4=allume
set var5=eteind


:startLOOP
if defined var%nb% ((if "!var%nb%!"=="allume" set "couleursegment%nb%=%couleurallume%")&set /a nb+=1&goto :startLOOP) else (goto :endLOOP)
:endLOOP


echo %couleursegment4%
pause>nul
exit


Voici un autre exemple d'application :
Code:
@echo off
setlocal EnableDelayedExpansion
title Dynamic Variable
set /a nb=1

set couleurallume=vert
set var1=eteind
set var2=allume
set var3=eteind
set var4=allume
set var5=allume

set "status=allume eteind"

:startLOOP
if defined var%nb% (for %%a in (%status%) do if "!var%nb%!"=="%%a" set "status%nb%=%%a"
set /a nb+=1&goto :startLOOP) else (set /a nb-=1&goto :endLOOP)
:endLOOP


for /l %%a in (1,1,%nb%) do echo;var%%a: !status%%a!
pause>nul
exit


p.s : Hugo7 a répondu avant moi lol j'avais pas vu, j'étais entrain d'écrire ce message
du coup on a dit un peu près la même chose




______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message Re: [R]Une variable dans une variable 
programme a écrit:
Bonjour,
J'ai un problème qui m'arrive souvent dans plusieurs programmes
On a plusieurs variables qui sont définies
Code:

set var1=hello
set var2=bonjour
set var3=bonsoir
set var4=allume
set var5=eteind

et puis j'ai ce genre de chose
Code:

:loopstatutallume
set /a nbr=%nbr%+1
if %var%nbr%%==allume set couleursegment%nbr%=%couleurallume%
if %nbr%==10 goto affichage
goto loopstatutallume

voilà donc au lieu de faire ca
Code:

if %var1%==allume set couleursegment1=%couleurallume%
if %var2%==allume set couleursegment2=%couleurallume%
if %var3%==allume set couleursegment3=%couleurallume%
if %var4%==allume set couleursegment4=%couleurallume%
if %var5%==allume set couleursegment5=%couleurallume%


c'est cette partie du code qui marche pas...

Code:

if %var%nbr%%==allume set couleursegment%nbr%=%couleurallume%


Si quelqu'un savait m'aider ...

Merci d'avance


Intéressant tout cela Very Happy

Merci à tout le monde Sujet Résolu !!!




______________________________________________________

Programme
Skype
Répondre en citant
Message [R]Une variable dans une variable 
Flammrock a écrit:
Ce que tu veux faire c'est utilisé des variables dynamiques Mr. Green
Le Batch permet justement de faire cela Okay


Pour créer une variable dynamique : il n'y a aucun problème
Pour lire une variable dynamique : Un petit problème s'impose Laughing



En fait, il faut utiliser les ! pour lire les variables dynamiques ou tout autres variables
Pour utiliser les !, il faut activer l'extension retardée comme ceci :
Code:
setlocal EnableDelayedExpansion

Pour en savoir + :


Donc dans ton cas, cela devrait donner quelques choses comme ça :
Code:
@echo off
setlocal EnableDelayedExpansion
title Dynamic Variable
set /a nb=1

set couleurallume=vert
set var1=hello
set var2=bonjour
set var3=bonsoir
set var4=allume
set var5=eteind


:startLOOP
if defined var%nb% ((if "!var%nb%!"=="allume" set "couleursegment%nb%=%couleurallume%")&set /a nb+=1&goto :startLOOP) else (goto :endLOOP)
:endLOOP


echo %couleursegment4%
pause>nul
exit


Voici un autre exemple d'application :
Code:
@echo off
setlocal EnableDelayedExpansion
title Dynamic Variable
set /a nb=1

set couleurallume=vert
set var1=eteind
set var2=allume
set var3=eteind
set var4=allume
set var5=allume

set "status=allume eteind"

:startLOOP
if defined var%nb% (for %%a in (%status%) do if "!var%nb%!"=="%%a" set "status%nb%=%%a"
set /a nb+=1&goto :startLOOP) else (set /a nb-=1&goto :endLOOP)
:endLOOP


for /l %%a in (1,1,%nb%) do echo;var%%a: !status%%a!
pause>nul
exit


p.s : Hugo7 a répondu avant moi lol j'avais pas vu, j'étais entrain d'écrire ce message
du coup on a dit un peu près la même chose


Merci donc en fait au lieu de faire à chaque fois :
Code:

if "%variable%" NEQ "" goto hello


c'est mieux de faire :
Code:

if defined variable goto hello





______________________________________________________

Programme
Skype
Répondre en citant
Message [R]Une variable dans une variable 
Ouais c'est plus court Okay




______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :

Hugo7, sans faire exprès... a écrit:
Il conviendra de [...] supprimer le panneau de la liste des panneaux présente dans une variable liste dans la liste des variables.
Visiter le site web du posteur Skype
Répondre en citant
Message [R]Une variable dans une variable 
Par contre possible de retirer ce truc "setlocal EnableDelayedExpansion" après avoir utilisé les variables dynamiques ? Pas envie de devoir utiliser des ! dégueulasses partout dans mon code Mr. Green




______________________________________________________

Répondre en citant
Message [R]Une variable dans une variable 
Ouais,
Code:
setlocal DISABLEDELAYEDEXPANSION





______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :

Hugo7, sans faire exprès... a écrit:
Il conviendra de [...] supprimer le panneau de la liste des panneaux présente dans une variable liste dans la liste des variables.
Visiter le site web du posteur Skype
Répondre en citant
Message [R]Une variable dans une variable 
Hugo7 a écrit:
Ouais,
Code:
setlocal DISABLEDELAYEDEXPANSION


Et endlocal ?




______________________________________________________

Programme
Skype
Répondre en citant
Message [R]Une variable dans une variable 
Le problème avec endlocal, c'est que ça rétablit les valeurs qu'il y avait avant le dermier setlocal.
Donc si on fait comme ça, ça marchera :
Code:
setlocal enabledelayedexpansion
du code
endlocal


Mais comme ça, le endlocal ne changera pas l'état des trucs :
Code:
setlocal enabledelayedexpansion
|
200 lignes de code.....
|
setlocal enabledelayedexpansion
::malencontreusement on a oublié qu'on avait déjà fait setlocal environ 200 lignes de code plus haut, donc on réécrit la même chose... erreur bête x)
|
encore du code
|
endlocal

il faudra donc écrire 2 fois endlocal

C'est expliqué dans cmd :
le meilleur logiciel a écrit:
après ENDLOCAL, l’état activé/désactivé des extensions de commandes sera
restauré à la valeur qu’il avait avant l’exécution de la commande SETLOCAL
correspondante.





______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :

Hugo7, sans faire exprès... a écrit:
Il conviendra de [...] supprimer le panneau de la liste des panneaux présente dans une variable liste dans la liste des variables.
Visiter le site web du posteur Skype
Répondre en citant
Message [R]Une variable dans une variable 
Hugo7 a écrit:
Le problème avec endlocal, c'est que ça rétablit les valeurs qu'il y avait avant le dermier setlocal.
Donc si on fait comme ça, ça marchera :
Code:
setlocal enabledelayedexpansion
du code
endlocal


Mais comme ça, le endlocal ne changera pas l'état des trucs :
Code:
setlocal enabledelayedexpansion
|
200 lignes de code.....
|
setlocal enabledelayedexpansion
::malencontreusement on a oublié qu'on avait déjà fait setlocal environ 200 lignes de code plus haut, donc on réécrit la même chose... erreur bête x)
|
encore du code
|
endlocal

il faudra donc écrire 2 fois endlocal

C'est expliqué dans cmd :
le meilleur logiciel a écrit:
après ENDLOCAL, l’état activé/désactivé des extensions de commandes sera
restauré à la valeur qu’il avait avant l’exécution de la commande SETLOCAL
correspondante.

Okay Okay Very Happy
Merci




______________________________________________________

Programme
Skype
Répondre en citant
Message [R]Une variable dans une variable 
Ozachi a écrit:
Par contre possible de retirer ce truc "setlocal EnableDelayedExpansion" après avoir utilisé les variables dynamiques ? Pas envie de devoir utiliser des ! dégueulasses partout dans mon code Mr. Green


Ba en fait, si tu fais %variable% après ça marche hein, pas besoin d'utiliser des ! partout Wink
Après c'est très pratique pour le traitement des for: au lieu de devoir call:label "val" pour tous les calculs et if, tu peux faire des !variable!.

Franchement, pas besoin de disable les extensions: c'est tout benef de les avoir enable.

Cdt, timothe_2000




______________________________________________________
Do what you want cause a pirate is free: you are a pirate !
Skype
Message [R]Une variable dans une variable 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch