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 :

Pourquoi ne pas toujours activer l'expansion retardée de variable ? [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 176
    Par défaut Pourquoi ne pas toujours activer l'expansion retardée de variable ?
    Bonjour à tous,

    Vu que pour ne pas utiliser l'expansion retardée, même en présence de SETLOCAL enabledelayedexpansion il suffit de saisir %var%, je me demandais dans quelles conditions il peut être intéressant de désactiver ce mode, car je suppose qu'il y en a ?

    J'ai lu le message très détaillé de maxim_um sur les expansions retardée mais il semble que je n'ai pas encore tout saisie sur l'usage ou non de cette optimisation de l'interpréteur

  2. #2
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    L'expansion retardée est un raccourçi ou corectif à un comportement illogique.

    Si on prend ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for /l %%a in (1 1 5) do (
      set "$value=%%a"
      echo %value%)
    la valeur de la variable afficher sera 5 à chaque itération.

    Si on prend le même code en donant la valeur de 0 à notre variable on aura 5 fois 0 cette fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    set "$value=0"
    for /l %%a in (1 1 5) do (
      set "$value=%%a"
      echo %value%)

    Pour contourner ce problème on utilise soit l'expansion retardée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    setlocal enabledelayedexpansion
    
    for /l %%a in (1 1 5) do (
      set "$value=%%a"
      echo !value!)

    soit l'utilisation d'un call :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @echo off
    
    for /l %%a in (1 1 5) do call:setvalue %%a
    
    exit/b
    
    :setvalue
      set "$value=%1"
      echo %$value%

    On preferera l'utilisation de l'expansion retardée dans les cas les plus simples pour une question de vitesse d'éxecution.

    Personnellement j'utilise beaucoup les call pour structurer de manière efficiente et lisibe mes codes.


    Maintenant rien ne t'empêche d'utiliser sistèmatiquement l'expansion retardée sauf en cas de traitement sur des noms de fichier
    contenant le ! qui sera mal interpreté évidemment.



  3. #3
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 176
    Par défaut
    Bien vu l'utilisation du call, mais je pense que pour le moment je continuerai à activer l'expansion au début du batch, par habitude.
    Tu fais bien de rappeler l'exception de la présence du "!" dans une chaîne.

    Donc l'unique intérêt que cette fonctionnalité ne soit pas activée par défaut de façon sous-jacente est d'avoir le choix de la rustine à appliquer.

    Merci pour ta réponse !

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 04/05/2015, 11h35
  2. Réponses: 3
    Dernier message: 11/03/2011, 15h01
  3. Pourquoi cette requête SQL ne marche pas toujours
    Par Platon93 dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 14/12/2006, 17h29
  4. [CSS] a:active ne fonctionne pas toujours ?
    Par KpTn dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 10/05/2006, 17h25

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