Batch ; 'set' d'une variable dans un IF

Résolu/Fermé
romegonic Messages postés 28 Date d'inscription lundi 26 juillet 2010 Statut Membre Dernière intervention 17 avril 2014 - Modifié par romegonic le 17/09/2010 à 11:33
romegonic Messages postés 28 Date d'inscription lundi 26 juillet 2010 Statut Membre Dernière intervention 17 avril 2014 - 17 sept. 2010 à 15:43
Bonjour,

Dans un batch, je modifie une variable dans une boucle FOR et un IF imbriqués.

Mais j'ai un problème cette modification de la variable n'est pas prise en compte :

(en amont la commande d'initialisation : set fichier=null)

set fichier=null
for /f %%i In ('dir /b /ad %APPLIS_ROOT_PATH%') Do (
echo %%i
if "%%i" NEQ "DefaultApplication.ear" (
if "%%i" NEQ "query.ear" (
if "%%i" NEQ "ivtApp.ear" (
echo %%i
echo Programme Principal
echo plouf
set fichier=%%i
echo Nom de fichier : %fichier%
echo.
)
)
)
)

La boucle FOR parcourt les noms des répertoires du chemin contenu dans la variable %APPLIS_ROOT_PATH% (préalablement définie).

Etant donné que la structure IF en batch est plus que limitée (pas de AND de OR, de elsif etc ...), je fais des vérifications sur la valeur des variables avant de faire se lancer le Programme Principal.

Le problème se situe au niveau de la récupération de %%i dans une variable temporaire fichier.
fichier se prend le premier nom de répertoire, la boucle continue et le %%i change donc à chaque fois de valeur, mais pas la variable fichier :

clicla1EAR_srvclicla1.ear
clicla1EAR_srvclicla1.ear
Programme Principal
plouf
Nom de fichier : null

clicla2EAR_srvclicla2.ear
clicla2EAR_srvclicla2.ear
Programme Principal
plouf
Nom de fichier : null

DefaultApplication.ear
gtpdev_srvgtpdev.ear
gtpdev_srvgtpdev.ear
Programme Principal
plouf
Nom de fichier : null

gtpint_srvgtpint.ear
gtpint_srvgtpint.ear
Programme Principal
plouf
Nom de fichier : null

gtpmoa_srvgtpmoa.ear
gtpmoa_srvgtpmoa.ear
Programme Principal
plouf
Nom de fichier : null

gtpswf_srvgtpswf.ear
gtpswf_srvgtpswf.ear
Programme Principal
plouf
Nom de fichier : null

ivtApp.ear
pkiintra1EAR_srvpkiintra1.ear
pkiintra1EAR_srvpkiintra1.ear
Programme Principal
plouf
Nom de fichier : null

query.ear
repro1EAR_srvrepro1.ear
repro1EAR_srvrepro1.ear
Programme Principal
plouf
Nom de fichier : null

sepia1EAR_srvsepia1.ear
sepia1EAR_srvsepia1.ear
Programme Principal
plouf
Nom de fichier : null

velinter1EAR_srvvelinter1.ear
velinter1EAR_srvvelinter1.ear
Programme Principal
plouf
Nom de fichier : null

velintra1EAR_srvvelintra1.ear
velintra1EAR_srvvelintra1.ear
Programme Principal
plouf
Nom de fichier : null


Donc en clair la variable fichier, initialisée à null, ne change pas de valeur dans la boucle, malgré le passage régulier de la commande set fichier=%%i

Et le fait de mettre des guillemets ne change rien au problème : set fichier="%%i"

Je suppose que tout ceci est liée à la portée de la variable (globale ou locale), mais je ne trouve pas comment changer le comportement ....

Merci par avance pour votre avis ou toute aide.

3 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
17 sept. 2010 à 14:33
hello
il faut
setlocal enableDelayedExpansion

et dans la boucle, utiliser des ! à la place des % pour la variable
echo Nom de fichier : !fichier!
1