Windows fichiers Batch: qu'est-ce que l'expansion des variables, et ce n'est EnableDelayedExpansion veux dire?
Ce que l'on entend par "extension variable"? Signifie simplement "définition de la variable", ou quelque chose d'autre?
Ce qui se passe quand je dis setLocal EnableDelayedExpansion
? Google n'était pas claire.
ss64.com/nt/delayedexpansion.html ; robvanderwoude.com/variableexpansion.php
J'ai lu ces pages. Je ne comprends toujours pas ce que signifie "l'expansion des variables' - t-il simplement dire "mettre une valeu dans une variable"?
Ok.Vérifiez aussi la de jeb réponse ici stackoverflow.com/questions/17265882/... icistackoverflow.com/questions/4094699/...
J'ai lu ces pages. Je ne comprends toujours pas ce que signifie "l'expansion des variables' - t-il simplement dire "mettre une valeu dans une variable"?
Ok.Vérifiez aussi la de jeb réponse ici stackoverflow.com/questions/17265882/... ici
help setlocal
à l'invite de commande fournit de la documentation, comme le fait setlocal /?
. Est-ce que c'est? (Il se lit assez clairement pour moi.)
OriginalL'auteur Aviv Cohn | 2014-08-15
Vous devez vous connecter pour publier un commentaire.
%
ou!
par sa valeur.%normal%
l'expansion se trouvent juste une fois, avant une ligne est exécutée. Cela signifie qu'un%variable%
extension la même valeur pas de questions si la ligne est exécutée plusieurs fois (comme dans unfor
de commande).!delayed!
expansion est effectuée chaque fois que la ligne est exécutée.Voir cet exemple:
De sortie:
Un autre:
De sortie:
Normal extension n'est pas nécessairement un inconvénient, mais dépend de la situation spécifique, il est utilisé. Par exemple, dans tous les autres langages de programmation, pour l'échange de la valeur de deux variables que vous avez besoin de l'aide d'un troisième, mais dans le Lot il peut être fait en une seule ligne:
%var%
est, il est remplacé, mais c'est la valeur de lors de l'analyse. Depuis très la ligne est parcourue qu'une seule fois,%var%
sera le même dans chaque itération de la boucle. Avec l'expansion retardée, en substituant %var% avec une valeur qui se produit au moment de l'exécution", alors que le fait de l'exécution de la ligne, ainsi%var%
est remplacé par l'actuelle valeur correcte. - Il Correct?Aussi, dois-je toujours utiliser
!var!
, sauf dans des circonstances inhabituelles?OriginalL'auteur Aacini
Dans le lot des variables sont évaluées en les enfermant dans des signes de pourcentage.
Cela signifie que l'expansion des variables.
Par rapport à d'autres langages de programmation, de lot, de ne pas vraiment travailler avec des variables.
Normalement, il ne fonctionne qu'avec l'expansion de l'.
Il fonctionne comme la macro extension de C/C++.
Donc, il n'existe pas une fonction de la longueur de la chaîne pour obtenir la longueur d'une variable,
mais vous pouvez écrire une fonction qui compte le nombre de caractères de texte.
Explication de setLocal EnableDelayedExpansion
La normale pour cent de l'expansion a deux inconvénients.
L'expansion qui se passe dans le moment de l'analyse d'une ligne ou un bloc fermé avec la parenthèse, pas lorsque le bloc est exécuté.
Permet de voir cet échantillon
La sortie sera
Comme le
echo %var%
d'en accroître la avant laset var=two
sera exécuté.Cela peut devenir problématique dans les boucles FOR.
Et le deuxième inconvénient est que le lot analyseur de parser le résultat développé de la variable.
Mais le pourcentage d'expansion existe depuis le début de MS-Dos (1920).
La DelayedExpansion ajoute une nouvelle expansion de caractère, le point d'exclamation
!
.Mais vous avez à l'activité première de l'utiliser avec
setlocal EnableDelayedExpansion
, c'est pour des raisons de compatibilité pour les anciens programmes.Si cela résout les deux problèmes de la pour cent de l'expansion.
OriginalL'auteur jeb