IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Variable dans nom de variable [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre actif
    Avatar de vincent magnin
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 209
    Points : 241
    Points
    241
    Par défaut Variable dans nom de variable
    Bonjour,

    Je ne sais pas vraiment si ce que je cherche à faire est possible en batch ... j'ai beau tourner et retourner je trouve pas comment m'en sortir


    => Mon code crée une variable par occurrence de dossier trouvé (dossier1,dossier2...etc...). Donc pas de souci pour créer dynamiquement des variables. Par contre, les utiliser est réellement plus dur ! En effet je n'arrive pas à faire passer une "double interprétation" à batch, en mettant une variable dans le nom d'une autre.

    En clair j'essaie de faire %mavariable(%compteur%)% le tout sans parenthèses bien sur.


    L'affectation marche très bien, je vois les valeurs en faisant
    set mavariable


    Un pti exemple de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    @echo off
    
    SetLocal EnableDelayedExpansion
    
    set cpt=1
    
    FOR /F "tokens=*" %%1 in ('dir /AD /B C:\') do (
                                            set dossier!cpt!=%%1
                                            set /a cpt+=1
                                           )
    
    set dossier
    
    pause
    
    set cpt2=1
    FOR /L %%1 in (1,1,%cpt%) do (
                                                 echo %dossier!cpt2!%
                                                 set /a cpt2+=1
                                                )
    EndLocal
    J'ai essayé les parenthèses, les %%, les !!, de mettre l'échappement ^ ... le tout un peu partout mais la je bloque, et pas moyen de trouver une solution jusqu'à présent :/

    A l'aide !

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    en rouge les modifs (rayé=suppression), en vert un déplacement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    @echo off
    
    SetLocal EnableDelayedExpansion
    
    set cpt=0
    
    FOR /F "tokens=*" %%1 in ('dir /AD /B C:\') do (
                                            set /a cpt+=1 
                                            set dossier!cpt!=%%1
                                           )
    
    rem set dossier
    
    pause
    
    rem set cpt2=1
    FOR /L %%1 in (1,1,%cpt%) do (
                                                 echo !dossier%%1!
                                                 rem set /a cpt2+=1
                                                )
    EndLocal

  3. #3
    Membre actif
    Avatar de vincent magnin
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 209
    Points : 241
    Points
    241
    Par défaut
    Merci


    Tu aurais une explication stp ? (ou un endroit où c'est bien expliqué en détail...)

    Perso jusqu'à présent j'ai toujours utilisé les ! uniquement pour les variables que j'affectais à l'intérieur d'un bloc et les y réutiliser ...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    une explication?

    J'ai testé, il était pas content, j'ai essayé avec des %% entre !! au lieu de !! entre %% et il est devenu coopératif =)

    J'ai corrigé aussi dans tes compteur le bug qui faisait que si tu as 50 repertoires %cpt%==51 parce que tu incrémente apres le dernier rep
    Ici on aura (peut etre) %cpt%==1 si il a 0 dossiers, mais faire un dir sur 0 dossiers c'est nul =)

    Du coup on a plus besoin du cpt2, c'est directement %%1 et la borne sup de for est %cpt%

    Je suis assez noob en batch, mais je suppose que les !!/%% sont la pour éviter les ambiguité du type %v1%v2%v3% == (v1)v2(v3) ou (v1(v2)v3), ils m'ont l'air interchangeables...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA]Stocker le nom d'une variable dans une autre variable
    Par strike57 dans le forum VBA Access
    Réponses: 6
    Dernier message: 23/04/2007, 19h09
  2. [Question] Doit-on traduire les noms de variables dans le code?
    Par r0d dans le forum Traduction Penser en C++
    Réponses: 4
    Dernier message: 21/02/2007, 20h54
  3. include + nom de variable dans JSP
    Par Mister Nono dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 19/09/2006, 11h27
  4. le nom d'un variable dans un autre variable
    Par rootdaoud dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 03/05/2006, 11h04
  5. Nom de variable dans une autre variable
    Par lsdInside dans le forum Linux
    Réponses: 5
    Dernier message: 04/12/2004, 19h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo