Mon problème :
J'ai une liste de données que je voudrais faire circuler dans une
variable d'environnement.
La solution que j'ai mise en place (voir plus bas) ne me plait pas car
pas facilement modifiable (la liste de données est amenée à changer
régulièrement).
Y aurait-il plus simple pour faire ça? genre déclaration de la liste des
données en tête du programme (doit tourner sous 2003R2)
Merci d'avance
YL
Ce que j'ai fait (pour la liste de données : G D 1 3)
var.bat est initalisé avec la ligne suivante set var=G
Programme principal
call var.bat
if "%var%"=="G" goto vg
if "%var%"=="D" goto vd
if "%var%"=="1" goto v1
if "%var%"=="3" goto v3
:TRAITEMENT ERREUR SI ON ARRIVE LA
goto fin
:vg
echo set var=D>var.bat
goto fin
:vd
echo set var=1>var.bat
goto fin
:v1
echo set var=3>var.bat
goto fin
:v3
echo set var=G>var.bat
goto fin
:fin
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Gilles LAURENT [MVP]
"Youri Ligotmi" wrote:
C'est vrai que l'énoncé n'est pas très clair ;-) Voici toutefois ci-dessous un script qui répond à MA compréhension du problème.
--- Coupez ici : CodeSnippet.cmd --- @echo off setlocal enabledelayedexpansion call var.bat for %%i in (GD,D1,13,3G) do ( set item=%%i if "%var%"=="!item:~0,1!" ( echo set var=!item:~1,1!>var.bat goto :fin ) ) echo An error occured !
-- Gilles LAURENT MVP Windows Server - Admin Frameworks http://glsft.free.fr
"Youri Ligotmi" wrote:
C'est vrai que l'énoncé n'est pas très clair ;-) Voici toutefois ci-dessous
un script qui répond à MA compréhension du problème.
--- Coupez ici : CodeSnippet.cmd ---
@echo off
setlocal enabledelayedexpansion
call var.bat
for %%i in (GD,D1,13,3G) do (
set item=%%i
if "%var%"=="!item:~0,1!" (
echo set var=!item:~1,1!>var.bat
goto :fin
)
)
echo An error occured !
C'est vrai que l'énoncé n'est pas très clair ;-) Voici toutefois ci-dessous un script qui répond à MA compréhension du problème.
--- Coupez ici : CodeSnippet.cmd --- @echo off setlocal enabledelayedexpansion call var.bat for %%i in (GD,D1,13,3G) do ( set item=%%i if "%var%"=="!item:~0,1!" ( echo set var=!item:~1,1!>var.bat goto :fin ) ) echo An error occured !
-- Gilles LAURENT MVP Windows Server - Admin Frameworks http://glsft.free.fr
Youri Ligotmi
Bonjour
Gilles LAURENT [MVP] a écrit :
"Youri Ligotmi" wrote:
C'est vrai que l'énoncé n'est pas très clair ;-) Voici toutefois ci-dessous un script qui répond à MA compréhension du problème.
Je dois avouer que c'est vrai que c'est moyennement clair (c'est pour ça que j'avais aussi mis mon code), ceci dit votre compréhension du problème est la bonne, votre script a la fonctionnalité voulue. J'admire l'astuce de la concaténation des données consécutives (GD, D1, 13, 3G). Une question : à quoi sert le "setlocal enabledelayedexpansion" (mes connaissances en batch remontent au dos 3.3 et je n'ai pas encore enregistré toutes les évolutions). Merci encore.
YL
--- Coupez ici : CodeSnippet.cmd --- @echo off setlocal enabledelayedexpansion call var.bat for %%i in (GD,D1,13,3G) do ( set item=%%i if "%var%"=="!item:~0,1!" ( echo set var=!item:~1,1!>var.bat goto :fin ) ) echo An error occured !
C'est vrai que l'énoncé n'est pas très clair ;-) Voici toutefois ci-dessous
un script qui répond à MA compréhension du problème.
Je dois avouer que c'est vrai que c'est moyennement clair (c'est pour ça
que j'avais aussi mis mon code), ceci dit votre compréhension du
problème est la bonne, votre script a la fonctionnalité voulue.
J'admire l'astuce de la concaténation des données consécutives (GD, D1,
13, 3G).
Une question : à quoi sert le "setlocal enabledelayedexpansion"
(mes connaissances en batch remontent au dos 3.3 et je n'ai pas encore
enregistré toutes les évolutions).
Merci encore.
YL
--- Coupez ici : CodeSnippet.cmd ---
@echo off
setlocal enabledelayedexpansion
call var.bat
for %%i in (GD,D1,13,3G) do (
set item=%%i
if "%var%"=="!item:~0,1!" (
echo set var=!item:~1,1!>var.bat
goto :fin
)
)
echo An error occured !
C'est vrai que l'énoncé n'est pas très clair ;-) Voici toutefois ci-dessous un script qui répond à MA compréhension du problème.
Je dois avouer que c'est vrai que c'est moyennement clair (c'est pour ça que j'avais aussi mis mon code), ceci dit votre compréhension du problème est la bonne, votre script a la fonctionnalité voulue. J'admire l'astuce de la concaténation des données consécutives (GD, D1, 13, 3G). Une question : à quoi sert le "setlocal enabledelayedexpansion" (mes connaissances en batch remontent au dos 3.3 et je n'ai pas encore enregistré toutes les évolutions). Merci encore.
YL
--- Coupez ici : CodeSnippet.cmd --- @echo off setlocal enabledelayedexpansion call var.bat for %%i in (GD,D1,13,3G) do ( set item=%%i if "%var%"=="!item:~0,1!" ( echo set var=!item:~1,1!>var.bat goto :fin ) ) echo An error occured !
Une question : à quoi sert le "setlocal enabledelayedexpansion" (mes connaissances en batch remontent au dos 3.3 et je n'ai pas encore enregistré toutes les évolutions).
Premier exemple sans expansion retardée :
--- @echo off set var¾fore if 1==1 ( set var¯ter echo [var=%var%] ) ---
Affichera var¾fore car la variable d'environnement %var% est résolue lors de la lecture du bloc if. Lors de la lecture du bloc if, var est bien égale à before.
Second exemple avec expansion retardée :
--- @echo off setlocal enabledelayedexpansion set var¾fore if 1==1 ( set var¯ter echo [var=!var!] ) endlocal ---
Affichera var¯ter car la variable d'environnement !var! est résolue cette fois-ci lors de la lecture de la ligne. Lors de la lecture de la ligne, var est bien égale à after car la ligne précédent définie var à after.
En espérant avec été suffisamment clair ;-)
-- Gilles LAURENT MVP Windows Server - Admin Frameworks http://glsft.free.fr
"Youri Ligotmi" wrote:
Bonjour
Bonjour,
[...]
Une question : à quoi sert le "setlocal enabledelayedexpansion"
(mes connaissances en batch remontent au dos 3.3 et je n'ai pas encore
enregistré toutes les évolutions).
Premier exemple sans expansion retardée :
---
@echo off
set var¾fore
if 1==1 (
set var¯ter
echo [var=%var%]
)
---
Affichera var¾fore car la variable d'environnement %var% est résolue lors
de la lecture du bloc if. Lors de la lecture du bloc if, var est bien égale à
before.
Second exemple avec expansion retardée :
---
@echo off
setlocal enabledelayedexpansion
set var¾fore
if 1==1 (
set var¯ter
echo [var=!var!]
)
endlocal
---
Affichera var¯ter car la variable d'environnement !var! est résolue cette
fois-ci lors de la lecture de la ligne. Lors de la lecture de la ligne, var
est bien égale à after car la ligne précédent définie var à after.
En espérant avec été suffisamment clair ;-)
--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Une question : à quoi sert le "setlocal enabledelayedexpansion" (mes connaissances en batch remontent au dos 3.3 et je n'ai pas encore enregistré toutes les évolutions).
Premier exemple sans expansion retardée :
--- @echo off set var¾fore if 1==1 ( set var¯ter echo [var=%var%] ) ---
Affichera var¾fore car la variable d'environnement %var% est résolue lors de la lecture du bloc if. Lors de la lecture du bloc if, var est bien égale à before.
Second exemple avec expansion retardée :
--- @echo off setlocal enabledelayedexpansion set var¾fore if 1==1 ( set var¯ter echo [var=!var!] ) endlocal ---
Affichera var¯ter car la variable d'environnement !var! est résolue cette fois-ci lors de la lecture de la ligne. Lors de la lecture de la ligne, var est bien égale à after car la ligne précédent définie var à after.
En espérant avec été suffisamment clair ;-)
-- Gilles LAURENT MVP Windows Server - Admin Frameworks http://glsft.free.fr
Youri Ligotmi
Gilles LAURENT [MVP] a écrit :
"Youri Ligotmi" wrote:
Bonjour
Bonjour,
[...]
Une question : à quoi sert le "setlocal enabledelayedexpansion" (mes connaissances en batch remontent au dos 3.3 et je n'ai pas encore enregistré toutes les évolutions).
Premier exemple sans expansion retardée :
--- @echo off set var¾fore if 1==1 ( set var¯ter echo [var=%var%] ) ---
Affichera var¾fore car la variable d'environnement %var% est résolue lors de la lecture du bloc if. Lors de la lecture du bloc if, var est bien égale à before.
Second exemple avec expansion retardée :
--- @echo off setlocal enabledelayedexpansion set var¾fore if 1==1 ( set var¯ter echo [var=!var!] ) endlocal ---
Affichera var¯ter car la variable d'environnement !var! est résolue cette fois-ci lors de la lecture de la ligne. Lors de la lecture de la ligne, var est bien égale à after car la ligne précédent définie var à after.
En espérant avec été suffisamment clair ;-)
Merci pour ces explications, j'ai compris que sans le "setlocal enabledelayedexpansion" la modification du contenu d'une variable dans une boucle if n'a pas d'effet. Merci encore pour votre aide.
YL
Gilles LAURENT [MVP] a écrit :
"Youri Ligotmi" wrote:
Bonjour
Bonjour,
[...]
Une question : à quoi sert le "setlocal enabledelayedexpansion"
(mes connaissances en batch remontent au dos 3.3 et je n'ai pas encore
enregistré toutes les évolutions).
Premier exemple sans expansion retardée :
---
@echo off
set var¾fore
if 1==1 (
set var¯ter
echo [var=%var%]
)
---
Affichera var¾fore car la variable d'environnement %var% est résolue lors
de la lecture du bloc if. Lors de la lecture du bloc if, var est bien égale à
before.
Second exemple avec expansion retardée :
---
@echo off
setlocal enabledelayedexpansion
set var¾fore
if 1==1 (
set var¯ter
echo [var=!var!]
)
endlocal
---
Affichera var¯ter car la variable d'environnement !var! est résolue cette
fois-ci lors de la lecture de la ligne. Lors de la lecture de la ligne, var
est bien égale à after car la ligne précédent définie var à after.
En espérant avec été suffisamment clair ;-)
Merci pour ces explications, j'ai compris que sans le "setlocal
enabledelayedexpansion" la modification du contenu d'une variable dans
une boucle if n'a pas d'effet.
Merci encore pour votre aide.
Une question : à quoi sert le "setlocal enabledelayedexpansion" (mes connaissances en batch remontent au dos 3.3 et je n'ai pas encore enregistré toutes les évolutions).
Premier exemple sans expansion retardée :
--- @echo off set var¾fore if 1==1 ( set var¯ter echo [var=%var%] ) ---
Affichera var¾fore car la variable d'environnement %var% est résolue lors de la lecture du bloc if. Lors de la lecture du bloc if, var est bien égale à before.
Second exemple avec expansion retardée :
--- @echo off setlocal enabledelayedexpansion set var¾fore if 1==1 ( set var¯ter echo [var=!var!] ) endlocal ---
Affichera var¯ter car la variable d'environnement !var! est résolue cette fois-ci lors de la lecture de la ligne. Lors de la lecture de la ligne, var est bien égale à after car la ligne précédent définie var à after.
En espérant avec été suffisamment clair ;-)
Merci pour ces explications, j'ai compris que sans le "setlocal enabledelayedexpansion" la modification du contenu d'une variable dans une boucle if n'a pas d'effet. Merci encore pour votre aide.
YL
Gilles LAURENT [MVP]
"Youri Ligotmi" a écrit dans le message de news:4970b64a$0$24817$ | Merci pour ces explications, j'ai compris que sans le "setlocal | enabledelayedexpansion" la modification du contenu d'une variable dans | une boucle if n'a pas d'effet.
Votre résumé est correct. Toutefois cela s'applique à tous les blocs d'intructions. Par exemple :
--- @echo off set var¾fore ( set var¯ter echo %var% ) ---
Affichera var¾fore car l'expansion retardée n'est pas fixée. De plus, si l'expansion retardée est activée alors la variable d'environnement "var" devra obligatoirement être encadrée du caractère "!" à la place du caractère "%" pour que l'interpréteur de commandes %comspec% (i.e cmd.exe) sache gérer cette situation. Il faut donc considérer l'expansion retardée comme une lecture séquentiel du fichier batch. Ce mode de fonctionnement est à mon avis le plus naturel. Je vous invite donc à toujours activer cette option.
-- Gilles LAURENT MVP Windows Server - Admin Frameworks http://glsft.free.fr
"Youri Ligotmi" <yl@free.fr.invalid> a écrit dans le message de
news:4970b64a$0$24817$426a74cc@news.free.fr
| Merci pour ces explications, j'ai compris que sans le "setlocal
| enabledelayedexpansion" la modification du contenu d'une variable dans
| une boucle if n'a pas d'effet.
Votre résumé est correct.
Toutefois cela s'applique à tous les blocs d'intructions.
Par exemple :
---
@echo off
set var¾fore
(
set var¯ter
echo %var%
)
---
Affichera var¾fore car l'expansion retardée n'est pas fixée. De plus,
si l'expansion retardée est activée alors la variable d'environnement
"var" devra obligatoirement être encadrée du caractère "!" à la place du
caractère "%" pour que l'interpréteur de commandes %comspec% (i.e
cmd.exe) sache gérer cette situation. Il faut donc considérer
l'expansion retardée comme une lecture séquentiel du fichier batch. Ce
mode de fonctionnement est à mon avis le plus naturel. Je vous invite
donc à toujours activer cette option.
--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
"Youri Ligotmi" a écrit dans le message de news:4970b64a$0$24817$ | Merci pour ces explications, j'ai compris que sans le "setlocal | enabledelayedexpansion" la modification du contenu d'une variable dans | une boucle if n'a pas d'effet.
Votre résumé est correct. Toutefois cela s'applique à tous les blocs d'intructions. Par exemple :
--- @echo off set var¾fore ( set var¯ter echo %var% ) ---
Affichera var¾fore car l'expansion retardée n'est pas fixée. De plus, si l'expansion retardée est activée alors la variable d'environnement "var" devra obligatoirement être encadrée du caractère "!" à la place du caractère "%" pour que l'interpréteur de commandes %comspec% (i.e cmd.exe) sache gérer cette situation. Il faut donc considérer l'expansion retardée comme une lecture séquentiel du fichier batch. Ce mode de fonctionnement est à mon avis le plus naturel. Je vous invite donc à toujours activer cette option.
-- Gilles LAURENT MVP Windows Server - Admin Frameworks http://glsft.free.fr