4 votes

Lot : Renvoi d'une valeur à partir d'un SETLOCAL EnableDelayedExpansion

Je me demande pourquoi ce code ne fonctionne pas comme prévu :

@ECHO off
SET S1=HELLO

SETLOCAL EnableDelayedExpansion
SET S2=!S1! WORLD^^!
ECHO !S2!
ENDLOCAL & SET S1=!S2!

ECHO %S1%
PAUSE

Sortie :

HELLO WORLD!
!S2!

Résultat attendu :

HELLO WORLD!
HELLO WORLD!

Merci.

9voto

jeb Points 26035

Il fonctionne comme prévu.
L'expansion retardée développe les variables au moment de l'exécution, et non au moment de l'analyse, de sorte qu'elle interprète votre ligne ENDLOCAL & SET S1=!S2! comme
endlocal
Mais à la partie de SET S1=!S2! l'expansion retardée est désactivée, de sorte qu'elle ne peut plus être étendue.

Dans votre cas, vous pourriez utiliser ENDLOCAL & SET S1=%S2%

Comme le point d'exclamation est S2 est "sûr", car l'exp. retardée est désactivée au moment de l'exécution.

Mais un retour toujours sécurisé est un peu plus compliqué.
Nous en avons discuté à Dostips : Retourner N'IMPORTE QUELLE chaîne au-delà de la limite ENDLOCAL

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X