Meilleur auteur de réponses
DOS et IF

Question
-
bonjour,
j'ai un petit truc que je ne comprends pas :(
lorsque je fais :
if 07 LSS 2 echo toto
l'echo ne se fait pas. normal
mais quand je fais:
if 08 LSS 2 echo toto
l'echo se fait :(((
ou
if 09 LSS 2 echo toto
j'ai besoin d'aide pour comprendre- Modifié ludo_titi jeudi 13 octobre 2011 14:11
jeudi 13 octobre 2011 14:10
Réponses
-
Le jeudi 13/10/2011 16:10:51, ludo_titi a écrit dans le message <news:3856c239-f19c-44d2-86a0-e980a0b72b60@communitybridge.codeplex.com> ce qui suit :
bonjour,
j'ai un petit truc que je ne comprends pas :(
lorsque je fais :if 07 LSS 2 echo toto
l'echo ne se fait pas. normal
mais quand je fais:
if 08 LSS 2 echo toto ou if 09 LSS 2 echo toto
l'echo se fait :(((
j'ai besoin d'aide pour comprendreHéhéhé !!!!! ;-)
Alors comme ça, on a oublié les règles d'écriture en ligne de commande?
Mon p'tit gars, quand tu écris une suite de chiffre précédée d'un "0" (zéro), cela signifie IMPLICTEMENT que tu l'écris en OCTAL !!!!
Et sa valeur numérique est bien évidemment calculée en interne pour autant qu'il n'y ait pas d'erreur.
OR, quand tu écris "08" ou "09", à cause du "0" initial cela signifie que ce qui suit est exprimé en numérotation octale, or les chiffres 8 et 9 N'EXISTENT PAS en octal !Donc 08 et 09 sont considérés comme une valeur octale incorrecte, convertie en interne en une valeur nulle.
Donc quand tu écris :
if 08 LSS 2 echo toto
c'est comme si tu écrivais :
if 0 LSS 2 echo toto
Et si tu doutes de ma parole, effectue le test tout bête suivant :Dans une fenêtre de commande, exécute la commande
SET /A N=xxxxxxxxxxxxxxxx étant une expression arithmétique représentant un nombre, p.ex.
set /A N=0x100
Le résultat affiché est alors
256
(Valeur décimale du nombre hexadécimal 0x100)
set /A N=07
Le résultat affiché est alors
7
set /A N=023
Le résultat affiché est alors
19
(Valeur décimale du nombre octal 023)
Mais si tu tapes
set /A N=08
Le résultat affiché est alors une INJURE :
Nombre non valide. Les constantes numériques doivent être soit
décimales (17), soit hexadécimales (0x11), soit octales (021).
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP Expert IT Pro]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr- Proposé comme réponse Thierry DEMAN-BARCELÒMVP samedi 15 octobre 2011 07:27
- Marqué comme réponse Florin Ciuca mercredi 19 octobre 2011 12:07
jeudi 13 octobre 2011 16:01 -
Bonjour,
effectivement, cette erreur d'octal apparait très régulièrement sur les scripts qui veulent tester des adresses IP en ajoutant (souvent à l'insu de l'utilisateur) des zéros surnuméraires.
Petit exemple rapide:
C:\Users\administrator>ping 010.020.030.040
Envoi d'une requête 'Ping' 8.16.24.32 avec 32 octets de données
Il suffit d'un zéro en trop dans une adresse IP pour que le résultat ne corresponde pas à la demande.
A+
Thierry DEMAN. Exchange MVP. https://www.mcpvirtualbusinesscard.com/VBCServer/MVPtdeman/profile (68 MCPs) http://base.faqexchange.info- Marqué comme réponse Florin Ciuca mercredi 19 octobre 2011 12:07
samedi 15 octobre 2011 07:33
Toutes les réponses
-
Le jeudi 13/10/2011 16:10:51, ludo_titi a écrit dans le message <news:3856c239-f19c-44d2-86a0-e980a0b72b60@communitybridge.codeplex.com> ce qui suit :
bonjour,
j'ai un petit truc que je ne comprends pas :(
lorsque je fais :if 07 LSS 2 echo toto
l'echo ne se fait pas. normal
mais quand je fais:
if 08 LSS 2 echo toto ou if 09 LSS 2 echo toto
l'echo se fait :(((
j'ai besoin d'aide pour comprendreHéhéhé !!!!! ;-)
Alors comme ça, on a oublié les règles d'écriture en ligne de commande?
Mon p'tit gars, quand tu écris une suite de chiffre précédée d'un "0" (zéro), cela signifie IMPLICTEMENT que tu l'écris en OCTAL !!!!
Et sa valeur numérique est bien évidemment calculée en interne pour autant qu'il n'y ait pas d'erreur.
OR, quand tu écris "08" ou "09", à cause du "0" initial cela signifie que ce qui suit est exprimé en numérotation octale, or les chiffres 8 et 9 N'EXISTENT PAS en octal !Donc 08 et 09 sont considérés comme une valeur octale incorrecte, convertie en interne en une valeur nulle.
Donc quand tu écris :
if 08 LSS 2 echo toto
c'est comme si tu écrivais :
if 0 LSS 2 echo toto
Et si tu doutes de ma parole, effectue le test tout bête suivant :Dans une fenêtre de commande, exécute la commande
SET /A N=xxxxxxxxxxxxxxxx étant une expression arithmétique représentant un nombre, p.ex.
set /A N=0x100
Le résultat affiché est alors
256
(Valeur décimale du nombre hexadécimal 0x100)
set /A N=07
Le résultat affiché est alors
7
set /A N=023
Le résultat affiché est alors
19
(Valeur décimale du nombre octal 023)
Mais si tu tapes
set /A N=08
Le résultat affiché est alors une INJURE :
Nombre non valide. Les constantes numériques doivent être soit
décimales (17), soit hexadécimales (0x11), soit octales (021).
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP Expert IT Pro]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr- Proposé comme réponse Thierry DEMAN-BARCELÒMVP samedi 15 octobre 2011 07:27
- Marqué comme réponse Florin Ciuca mercredi 19 octobre 2011 12:07
jeudi 13 octobre 2011 16:01 -
Bonjour,
"cela signifie IMPLICTEMENT que tu l'écris en OCTAL"
effectivement je comprends mieux
merci de tes réponse Jean-Claude
Cdt
vendredi 14 octobre 2011 08:07 -
Bonjour,
effectivement, cette erreur d'octal apparait très régulièrement sur les scripts qui veulent tester des adresses IP en ajoutant (souvent à l'insu de l'utilisateur) des zéros surnuméraires.
Petit exemple rapide:
C:\Users\administrator>ping 010.020.030.040
Envoi d'une requête 'Ping' 8.16.24.32 avec 32 octets de données
Il suffit d'un zéro en trop dans une adresse IP pour que le résultat ne corresponde pas à la demande.
A+
Thierry DEMAN. Exchange MVP. https://www.mcpvirtualbusinesscard.com/VBCServer/MVPtdeman/profile (68 MCPs) http://base.faqexchange.info- Marqué comme réponse Florin Ciuca mercredi 19 octobre 2011 12:07
samedi 15 octobre 2011 07:33