Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Commande Dos - IF GEQ ou IF LSS avec Nombre possedant Virgule

4 réponses
Avatar
Eric M
Bonjour a tous,

Voila j'ai fait un petit script dos qui me sert a comparer deux nombres. Or
quand le nombre a une virgule la comparaison echoue.

exemple d'echec
if 12,25 GEQ 10 echo eric

me met erreur innatendue . La virgule lui affirme je crois , en fait que la
commande est cassée

exemple de reussite (la virgule est remplacée par un point)
if 12.25 GEQ 10 echo eric


je ne sais pas trop quoi faire car par exemple si on met le 12,25 en
paranthése , pour lui ce n'est plus un nombre
if "12,25" GEQ 10 echo eric
(cela ne me renvoit pas eric)

mon script reel etant une variable sété et il est difficile pour moi de
modifier dans la suite de mon script les virgules par un point ..


Merci pour votre aide.

4 réponses

Avatar
Eric M
Bonjour Thierry
Merci pour votre réponse..

Je ne connaissais pas cette commande (qui a prioiri est une variable dans
une variable ??)

Cependant que ce soit sous console ou forme de point bat ou sous console,
j'ai toujours la meme erreur (innatendue). ou alors je fais une erreur dans
votre solution

mon virgule.bat

set VAR=%VAR:,=.%
if 10,25 geq 10,12 echo eric
pause

Merci pour votre aide





Bonsoir Eric,

tu peux remplacer facilement la virgule par des points !

set VAR=%VAR:,=.%

A bientôt,

--
Thierry DEMAN-BARCELÒ
MVP Exchange, SQL/Server
MCSE+M,MCSE+I,MCDBA,MCSA+S
http://webfamilial.dyndns.org
http://faqexchange.dyndns.org
"Eric M" <Eric a écrit dans le message de news:
Bonjour a tous,

Voila j'ai fait un petit script dos qui me sert a comparer deux nombres. Or
quand le nombre a une virgule la comparaison echoue.

exemple d'echec
if 12,25 GEQ 10 echo eric

me met erreur innatendue . La virgule lui affirme je crois , en fait que la
commande est cassée

exemple de reussite (la virgule est remplacée par un point)
if 12.25 GEQ 10 echo eric


je ne sais pas trop quoi faire car par exemple si on met le 12,25 en
paranthése , pour lui ce n'est plus un nombre
if "12,25" GEQ 10 echo eric
(cela ne me renvoit pas eric)

mon script reel etant une variable sété et il est difficile pour moi de
modifier dans la suite de mon script les virgules par un point ..


Merci pour votre aide




Avatar
Thierry DEMAN [MVP]
Bonsoir Eric,

j'ai trouvé une solution ! c'est la virgule qui sert de terminateur aux
paramètres à comparer !

il faut donc tester en entourant les variables (de chaque élément à
comparer) par des "guillemets"

set VAR,25

set VAR=%VAR:,=.%
IF "%VAR%" GEQ "10,12" echo ERIC
pause

A bientôt,

--
Thierry DEMAN-BARCELÒ
MVP Exchange, SQL/Server
MCSE+M,MCSE+I,MCDBA,MCSA+S
http://webfamilial.dyndns.org
http://faqexchange.dyndns.org
"Eric M" a écrit dans le message de news:

Bonjour Thierry
Merci pour votre réponse..

Je ne connaissais pas cette commande (qui a prioiri est une variable dans
une variable ??)

Cependant que ce soit sous console ou forme de point bat ou sous console,
j'ai toujours la meme erreur (innatendue). ou alors je fais une erreur
dans
votre solution

mon virgule.bat

set VAR=%VAR:,=.%
if 10,25 geq 10,12 echo eric
pause

Merci pour votre aide





Bonsoir Eric,

tu peux remplacer facilement la virgule par des points !

set VAR=%VAR:,=.%

A bientôt,

--
Thierry DEMAN-BARCELÒ
MVP Exchange, SQL/Server
MCSE+M,MCSE+I,MCDBA,MCSA+S
http://webfamilial.dyndns.org
http://faqexchange.dyndns.org
"Eric M" <Eric a écrit dans le message de
news:
Bonjour a tous,

Voila j'ai fait un petit script dos qui me sert a comparer deux
nombres. Or
quand le nombre a une virgule la comparaison echoue.

exemple d'echec
if 12,25 GEQ 10 echo eric

me met erreur innatendue . La virgule lui affirme je crois , en fait
que la
commande est cassée

exemple de reussite (la virgule est remplacée par un point)
if 12.25 GEQ 10 echo eric


je ne sais pas trop quoi faire car par exemple si on met le 12,25 en
paranthése , pour lui ce n'est plus un nombre
if "12,25" GEQ 10 echo eric
(cela ne me renvoit pas eric)

mon script reel etant une variable sété et il est difficile pour moi de
modifier dans la suite de mon script les virgules par un point ..


Merci pour votre aide






Avatar
Eric M
Bonjour a tous .
Bonjour Thierry.

Merci pour ta réponse thierry que j'ai étudiée.
Manifestement je pense qu'il y a un petit probleme avec la commande IF LSS ..
Outre le fait de la séparation par point ou par virgule

Exemple :
if 70 LSS 80 echo PlusPetit donne un resultat correct


Essayons maintenant de comparer 66.23 et 500 ou 66,23 et 500

IF 66.23 LSS 500 echo PlusPetit (resultat incorrect !!! )

la meme en ,
IF 66,23 LSS 500 echo PlusPetit (incorrect la virgule casse la commande,
normal )
avec des ""
IF "66,23" LSS 500 echo PlusPetit (resultat correct, mais ! si on met le
500 entre guillemet c'est incorrect !!)


Mais si on change 500 par 700 , la cela fonctionne
IF 66.23 LSS 700 echo PlusPetit (resultat correct !!)
ou IF "66.23" LSS "700" echo PlusPetit (resultat incorrect)


Pour résumé
Si
IF "66,23" LSS "700" echo PlusPetit donne un resultat correct
IF "66,23" LSS "100" echo PlusPetit donne un resultat incorrect

IF "66.23" LSS "700" echo PlusPetit donne un resultat correct
IF "66.23" LSS "100" echo PlusPetit donne un resultat incorrect

IF 66.23 LSS 700 echo PlusPetit donne un resultat correct
IF 66.23 LSS 100 echo PlusPetit donne un resultat incorrect


donc d'apres ce que je comprends , manifestement il fait une comparaison sur
une chaine litterale au niveau des digits alors qu'il est presenté par MS
comme une comparaison numérique et dans l'aide rien n'est précisé.
A priori ce problème vient depuis la nt4 (Je peux dire des erreurs ne pas
hésiter à me corriger) . Ainsi pour lui 66.23 est plus grand que 100 (6 au
dessus de 1)

Que puis je faire pour mon script .. sinon passer en vbs ou en perl que je
ne matrise pas trop.
Y a t il une solution ?? car cela fait plusieurs jours que je travaille sur
ces cripots et celui ci est le dernier en bout de chaine.

Mon script compare.bat à cette forme
for /f %%c in (E:httrack%1_pbas.txt) do set pbas_temp=%%c
for /f %%e in (E:httrack%1_pclot_tampon.txt) do set pclot_tampon=%%e
if "%pclot_tampon%" LSS "%pbas_temp%" echo
%pclot_tampon%>E:httrack%1_pbas.txt
copy /y E:%1_pclot_tampon.txt E:%1_pclot.txt


Merci à Tous .Cette erreur, ou mon incompetence est bien pénible.




Bonsoir Eric,

j'ai trouvé une solution ! c'est la virgule qui sert de terminateur aux
paramètres à comparer !

il faut donc tester en entourant les variables (de chaque élément à
comparer) par des "guillemets"

set VAR,25

set VAR=%VAR:,=.%
IF "%VAR%" GEQ "10,12" echo ERIC
pause

A bientôt,

--
Thierry DEMAN-BARCELÒ
MVP Exchange, SQL/Server
MCSE+M,MCSE+I,MCDBA,MCSA+S
http://webfamilial.dyndns.org
http://faqexchange.dyndns.org
"Eric M" a écrit dans le message de news:

Bonjour Thierry
Merci pour votre réponse..

Je ne connaissais pas cette commande (qui a prioiri est une variable dans
une variable ??)

Cependant que ce soit sous console ou forme de point bat ou sous console,
j'ai toujours la meme erreur (innatendue). ou alors je fais une erreur
dans
votre solution

mon virgule.bat

set VAR=%VAR:,=.%
if 10,25 geq 10,12 echo eric
pause

Merci pour votre aide





Bonsoir Eric,

tu peux remplacer facilement la virgule par des points !

set VAR=%VAR:,=.%

A bientôt,

--
Thierry DEMAN-BARCELÒ
MVP Exchange, SQL/Server
MCSE+M,MCSE+I,MCDBA,MCSA+S
http://webfamilial.dyndns.org
http://faqexchange.dyndns.org
"Eric M" <Eric a écrit dans le message de
news:
Bonjour a tous,

Voila j'ai fait un petit script dos qui me sert a comparer deux
nombres. Or
quand le nombre a une virgule la comparaison echoue.

exemple d'echec
if 12,25 GEQ 10 echo eric

me met erreur innatendue . La virgule lui affirme je crois , en fait
que la
commande est cassée

exemple de reussite (la virgule est remplacée par un point)
if 12.25 GEQ 10 echo eric


je ne sais pas trop quoi faire car par exemple si on met le 12,25 en
paranthése , pour lui ce n'est plus un nombre
if "12,25" GEQ 10 echo eric
(cela ne me renvoit pas eric)

mon script reel etant une variable sété et il est difficile pour moi de
modifier dans la suite de mon script les virgules par un point ..


Merci pour votre aide











Avatar
Thierry DEMAN [MVP]
Effectivement, en fait, rien ne prouve que les nombres décimaux sont prévus
dans la commande IF !

On pourrait imaginer tester par partie (tester la partie avant la virgule de
chaque nombre, puis tester la partie droite en cas d'égalité),
mais le passage par du VbScript serait une solution radicale qui t'offrirait
énormément plus de possibilités.
=> A mon avis, une bonne administration Windows 2000 et 2003 nécessite à un
moment ou un autre la rédaction de scripts VBS, autant s'y faire et s'y
mettre au plus tôt.

A bientôt,
--
Thierry DEMAN-BARCELÒ
MVP Exchange, SQL/Server
MCSE+M,MCSE+I,MCDBA,MCSA+S
http://webfamilial.dyndns.org
http://faqexchange.dyndns.org
"Eric M" a écrit dans le message de news:

Bonjour a tous .
Bonjour Thierry.

Merci pour ta réponse thierry que j'ai étudiée.
Manifestement je pense qu'il y a un petit probleme avec la commande IF LSS
..
Outre le fait de la séparation par point ou par virgule

Exemple :
if 70 LSS 80 echo PlusPetit donne un resultat correct


Essayons maintenant de comparer 66.23 et 500 ou 66,23 et 500

IF 66.23 LSS 500 echo PlusPetit (resultat incorrect !!! )

la meme en ,
IF 66,23 LSS 500 echo PlusPetit (incorrect la virgule casse la commande,
normal )
avec des ""
IF "66,23" LSS 500 echo PlusPetit (resultat correct, mais ! si on met le
500 entre guillemet c'est incorrect !!)


Mais si on change 500 par 700 , la cela fonctionne
IF 66.23 LSS 700 echo PlusPetit (resultat correct !!)
ou IF "66.23" LSS "700" echo PlusPetit (resultat incorrect)


Pour résumé
Si
IF "66,23" LSS "700" echo PlusPetit donne un resultat correct
IF "66,23" LSS "100" echo PlusPetit donne un resultat incorrect

IF "66.23" LSS "700" echo PlusPetit donne un resultat correct
IF "66.23" LSS "100" echo PlusPetit donne un resultat incorrect

IF 66.23 LSS 700 echo PlusPetit donne un resultat correct
IF 66.23 LSS 100 echo PlusPetit donne un resultat incorrect


donc d'apres ce que je comprends , manifestement il fait une comparaison
sur
une chaine litterale au niveau des digits alors qu'il est presenté par MS
comme une comparaison numérique et dans l'aide rien n'est précisé.
A priori ce problème vient depuis la nt4 (Je peux dire des erreurs ne pas
hésiter à me corriger) . Ainsi pour lui 66.23 est plus grand que 100 (6
au
dessus de 1)

Que puis je faire pour mon script .. sinon passer en vbs ou en perl que je
ne matrise pas trop.
Y a t il une solution ?? car cela fait plusieurs jours que je travaille
sur
ces cripots et celui ci est le dernier en bout de chaine.

Mon script compare.bat à cette forme
for /f %%c in (E:httrack%1_pbas.txt) do set pbas_temp=%%c
for /f %%e in (E:httrack%1_pclot_tampon.txt) do set pclot_tampon=%%e
if "%pclot_tampon%" LSS "%pbas_temp%" echo
%pclot_tampon%>E:httrack%1_pbas.txt
copy /y E:%1_pclot_tampon.txt E:%1_pclot.txt


Merci à Tous .Cette erreur, ou mon incompetence est bien pénible.