locked
DOS et IF RRS feed

  • 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
    ou
    if 09 LSS 2 echo toto
    l'echo se fait :(((
    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 comprendre

    Hé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=xxxxxxxxx

    xxxxxxx é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

    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 comprendre

    Hé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=xxxxxxxxx

    xxxxxxx é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

    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