Batch ; 'set' d'une variable dans un IF
Résolu
romegonic
Messages postés
28
Date d'inscription
Statut
Membre
Dernière intervention
-
romegonic Messages postés 28 Date d'inscription Statut Membre Dernière intervention -
romegonic Messages postés 28 Date d'inscription Statut Membre Dernière intervention -
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.
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.
A voir également:
- Batch if set variable
- Set-top box - Accueil - Box & Connexion Internet
- Fichier batch - Guide
- Vba range avec variable ✓ - Forum VB / VBA
- Batch converter - Télécharger - Photo & Graphisme
- Vba excel sélectionner une plage de cellules variable ✓ - Forum VB / VBA
3 réponses
hello
il faut
et dans la boucle, utiliser des ! à la place des % pour la variable
il faut
setlocal enableDelayedExpansion
et dans la boucle, utiliser des ! à la place des % pour la variable
echo Nom de fichier : !fichier!
Petite précision, je cherche désormais un moyen de rendre une variable non environnementale.
C'est sans doute le problème que je rencontre, le batch n'est pas en mesure, dès lors que la commande set a créé la variable fichier en tant que variable d'environnement, de la modifier.
Je cherche un truc du genre set envlocal, ou du même style ... si cela dit quelque chose à quelqu'un :-)
C'est sans doute le problème que je rencontre, le batch n'est pas en mesure, dès lors que la commande set a créé la variable fichier en tant que variable d'environnement, de la modifier.
Je cherche un truc du genre set envlocal, ou du même style ... si cela dit quelque chose à quelqu'un :-)
Salut, oui je préparais une note avec ces deux points justement ^^
Une variable préalablement déclarée, ne peut être modifiée dans une boucle FOR, que via deux conditions :
1- Déclaration avant la boucle de :
========================
setlocal EnableDelayedExpansion
2- Appel de la variable entre deux points ! au lieu de deux %
===========================================
i.e
setlocal EnableDelayedExpansion
for /f %%i In ('dir /b /ad %APPLIS_ROOT_PATH%') Do (
if "%%i" NEQ "DefaultApplication.ear" (
if "%%i" NEQ "query.ear" (
if "%%i" NEQ "ivtApp.ear" (
echo Valeur de i : %%i
set fichier=%%i
echo Valeur de fichier : !fichier!
echo.
)
)
)
)
Dans cet exemple la commande d'affichage suivante fonctionne :
echo Valeur de fichier : !fichier!
Par contre si :
for /f %%i In ('dir /b /ad %APPLIS_ROOT_PATH%') Do (
if "%%i" NEQ "DefaultApplication.ear" (
if "%%i" NEQ "query.ear" (
if "%%i" NEQ "ivtApp.ear" (
echo Valeur de i : %%i
set fichier=%%i
echo Valeur de fichier : %fichier%
echo.
)
)
)
)
Cela ne fonctionne pas, car setlocal n'est pas lancée, et le nom de la variable est entre deux % et non entre deux !
Merci quand même dubcek car si je n'avais pas trouvé par moi-même tu m'aurais retiré l'épine du pied, et même si c'est le but de ce genre de fofo, c'est cool de ta part :-)
Sujet résolu.
Une variable préalablement déclarée, ne peut être modifiée dans une boucle FOR, que via deux conditions :
1- Déclaration avant la boucle de :
========================
setlocal EnableDelayedExpansion
2- Appel de la variable entre deux points ! au lieu de deux %
===========================================
i.e
setlocal EnableDelayedExpansion
for /f %%i In ('dir /b /ad %APPLIS_ROOT_PATH%') Do (
if "%%i" NEQ "DefaultApplication.ear" (
if "%%i" NEQ "query.ear" (
if "%%i" NEQ "ivtApp.ear" (
echo Valeur de i : %%i
set fichier=%%i
echo Valeur de fichier : !fichier!
echo.
)
)
)
)
Dans cet exemple la commande d'affichage suivante fonctionne :
echo Valeur de fichier : !fichier!
Par contre si :
for /f %%i In ('dir /b /ad %APPLIS_ROOT_PATH%') Do (
if "%%i" NEQ "DefaultApplication.ear" (
if "%%i" NEQ "query.ear" (
if "%%i" NEQ "ivtApp.ear" (
echo Valeur de i : %%i
set fichier=%%i
echo Valeur de fichier : %fichier%
echo.
)
)
)
)
Cela ne fonctionne pas, car setlocal n'est pas lancée, et le nom de la variable est entre deux % et non entre deux !
Merci quand même dubcek car si je n'avais pas trouvé par moi-même tu m'aurais retiré l'épine du pied, et même si c'est le but de ce genre de fofo, c'est cool de ta part :-)
Sujet résolu.