BATCH:La condition du IF ne s'applique pas

Résolu
Bonjour,

Tout d'abord, désolé pour le doublon de POST mais je voulais préciser dans le titre qu'il s'agit de BATCH et entre temps je suis devenu membre...

Je cherche à faire converger une variable vers une valeur en me basant sur un test. Ici le test est simplement "inférieur à R?". Ici la boucle for comprend 2 itérations pour le débogage mais à terme il y en aura 20.

Voici le programme:

@echo on 
rem Initialisation des varaiables 
set /A R=102 rem valeur recherchée 
set /A test=10 
set /A Prec=10 
set /A incre=1000 
set /A test1=0 
set /A delta=1000 
set petit="faux" 
pause 
rem boucle pour convergence 
for %%A in ( 1 2 ) do ( 
rem Lancement calcul valeur test 
If /i %test% LEQ %R% set petit="vrai" 
echo %petit% 
If /i %petit%=="vrai" set test1 = %test% 
echo %test1% 

If /i %petit%=="faux" set /A incre = %incre%/10 
echo %incre% 

set /A test = %test1% + %incre% 
echo %test% 
set /A delta = %test% - %test1% 
echo %delta% 
rem if %delta% LEQ %Prec% ( echo "solution trouvée %test%" ) 

set petit="faux" 
pause 
) 
pause 


Lorsqu'on le lance on aperçoit que les conditions des IFs ne s'appliquent jamais.

Avec les variables test=10 et R=102:
If /i %test% LEQ %R% set petit="vrai" 
echo %petit% 

devrait être vrai or la fonction "echo" nous montre que la valeur reste inchangée

Et aussi
If /i %petit%=="faux" set /A incre = %incre%/10 
echo %incre% 

Vu que la première condition ne s'est pas exécuté on obtient "faux"=="faux" or la variable est toujours égale à 1000 et non à 100.

J'imagine que c'est une erreur de syntaxe sur le IF car les fonctions soumises à condition fonctionnent si elles sont lancées séparément.

J'espère que quelqu'un pourra m'aider sur mon problème, Merci d'avance!

3 réponses

  1. hello
    essayer avec
    @echo on  
    setlocal enableDelayedExpansion 
    rem Initialisation des varaiables 
    ...
    et des ! à la place des % dans une boucle FOR
    for %%A in ( 1 2 ) do (  
    rem Lancement calcul valeur test  
    If /i !test! LEQ !R! set petit="vrai"  
    echo !petit!
    ...
    0
    1. Parfait ça fonctionne!
      Je te remercie!
      0
      1. good
        clique résolu au dessus du premier message
        0