NEQ mettre plusieurs variables

Résolu
Deewy -  
 Jin -

Bonjour, ça serait pour savoir si l'on peut mettre plusieurs comparatifs.

exemple :

@echo off
echo Confiture [1]   Nutella [2] 
echo. 
set /p A=
if  "%A%"=="1" goto Confiture
if  "%A%"=="2" goto Nutella
if "%A%" NEQ "1" echo Error restart the programs

:Confiture
cls
set /p ID=ID : 
cls
echo Search...
echo "ID : %ID%" >> %ID%.txt
ping -n 1 -w 2000 127.255.255.255 >nul
exit

:Confiture
cls
set /p URL=URL : 
cls
echo Search...
echo %URL% >> %URL%.txt
ping -n 1 -w 2000 127.255.255.255 >nul
exit

je souhaite qu'après le NEQ on puisse mettre plusieurs variables.


Windows / Chrome 120.0.0.0

2 réponses

  1. jee pee Messages postés 9442 Date d'inscription   Statut Modérateur Dernière intervention   9 981
     

    Bonjour,

    Comme tu as déjà testé 1 et 2 avant, le NEQ ne sert pas, on est certain à cet endroit que A ne contient ni 1 ni 2

    Tu peux alors faire :

    @echo off
    CLS
    :debut
    echo.
    set /p A=Confiture [1]   Nutella [2] ? 
    echo.
    if  "%A%" == "1" goto Confiture
    if  "%A%" == "2" goto Nutella
    echo Réponse non conforme
    goto debut 

    0
    1. jee pee Messages postés 9442 Date d'inscription   Statut Modérateur Dernière intervention   9 981
       

      Juste pour répondre au fond de la question, en mettant le NEQ avant de tester 1 ou 2, on pourrait faire

      @echo off
      CLS
      :debut
      echo.
      set /p A=Confiture [1]   Nutella [2] ?
      echo.
      
      if "%A%" NEQ "1" if "%A%" NEQ "2" echo Error restart the programs & goto debut
      
      if  "%A%" == "1" goto Confiture
      if  "%A%" == "2" goto Nutella
      
      1
    2. brucine Messages postés 24901 Date d'inscription   Statut Membre Dernière intervention   4 177
       

      Bonjour,

      On peut se contenter de rendre tout autre choix impossible via une commande CHOICE qui sera moins bavarde

       

      @ECHO OFF
      
      CHOICE /C 12 /M "1 Confiture 2 Nutella "
      IF %ERRORLEVEL% EQU 2 GOTO Nutella
      IF %ERRORLEVEL% EQU 1 GOTO Confiture
      
      :Nutella
      Echo Nutella
      pause
      GOTO EOF
      
      :Confiture
      Echo Confiture
      pause
      GOTO EOF
      0
    3. Deewy
       

      D'accord merci 

      0
    4. Jin > brucine Messages postés 24901 Date d'inscription   Statut Membre Dernière intervention  
       

      Bonsoir ;)
      Avec la fonction Choice, Si on veut éviter "les bips" de bug, on mettra toute l'alphabet et le pavé numérique.
         
      Important, pour faire pro'pre on enrobera aussi le %errorlevel% dans une variable. De cette façon on verrouille la valeur du choix dans une variable, %errorlevel% pouvant aisément changer de valeur par la suite selon la complexité du code.
      Exemple : Le plus sain, et code facilement modulable Avec le comparatif EQU :

      @ECHO OFF
      
      :Debut
      ECHO 1 Confiture 2 Nutella X Exit
      CHOICE /C 1234567890abcdefghijklmnopqrstuvwxyz >nul
      SET "A=%ERRORLEVEL%"
      
      IF "%A%" EQU "1" GOTO Confiture
      IF "%A%" EQU "2" GOTO Nutella
      IF "%A%" EQU "34" GOTO EOF
      
      ECHO Choix non valide.
      timeout /t 1 >nul
      cls
      GOTO Debut
      
      :Nutella
      ECHO Nutella
      pause
      GOTO EOF
      
      :Confiture
      ECHO Confiture
      pause
      GOTO EOF
      
      :EOF
      cls
      ECHO A Bientot !
      timeout /t 5 >nul
      EXIT

      Le plus amusant, avec le comparatif NEQ :

      @ECHO OFF
      
      :Debut
      ECHO 1 Confiture 2 Nutella X Exit
      CHOICE /C 1234567890abcdefghijklmnopqrstuvwxyz >nul
      SET "A=%ERRORLEVEL%"
      
      IF "%A%" NEQ "2" GOTO Confiture
      
      :Nutella
      IF "%A%" NEQ "2" GOTO Validation
      ECHO Nutella
      pause
      GOTO EOF
      
      :Confiture
      IF "%A%" NEQ "1" GOTO Nutella
      ECHO Confiture
      pause
      GOTO EOF
      
      :Validation
      IF "%A%" NEQ "34" GOTO Invalidation
      GOTO EOF
      
      :Invalidation
      ECHO Choix non valide.
      timeout /t 1 >nul
      cls
      GOTO Debut
      
      :EOF
      cls
      ECHO A Bientot !
      timeout /t 3 >nul
      EXIT

      Pour répondre à la question, le comparatif NEQ est excluant, si on l'utilise c'est pour exclure les autres valeurs mais continuer si la valeur comparée est correcte. ;)
         
      Il faut utiliser les comparatifs au plus simple, ou sinon il faudra adapter le code selon le comparatif qu'on utilise, les deux codes en haut sont très différents, selon on utilise EQU ou NEQ mais ils ont exactement le même fonctionnement.

      0
    5. jee pee Messages postés 9442 Date d'inscription   Statut Modérateur Dernière intervention   9 981 > Jin
       

      oui, pourquoi faire simple quand on peut faire compliqué

      0
  2. Jin
     

    Salut :)

    oui bien sûr on peut, NEQ veut dire "pas égal"

    Regarde ici ça pourrait t'aider : https://ss64.com/nt/if.html

    Je te fait un exemple sympa en utilisant NEQ :

    @echo off
    
    :Debut
    set /a tempo=0
    set /a tip=0
    set /a top=0
    set texte=Vous avez choisi
    cls
    echo Bonjour ! 
    echo Nous avons de la confiture et du nutella !
    :Matin
    timeout /t 2 /nobreak >nul
    echo Confiture [1] ou Nutella [2] ?
    set /p A=
    
    
    :Sucre
    if "%A%" NEQ "1" goto Nescafe
    goto Confiture
    
    :Nescafe
    if "%A%" NEQ "2" goto Tartine
    goto Nutella
    
    :Tartine
    cls
    if %tempo% geq 1 goto Lait
    set /a tempo = tempo + 1
    echo Choix non valide.
    echo Veuillez entrer 1 pour la confiture 
    echo ou bien 2 pour le Nutella.
    set /p A=
    goto Sucre
    
    :Lait
    if %tempo% geq 2 goto Gourmant
    set /a tempo = tempo + 1
    echo Une erreur est survenue,
    echo Svp veuillez reformuler votre choix :
    goto Matin
    
    :Confiture
    set /a flux = flux + 1
    :Fruit
    if %tip%==2 goto Creme
    cls
    echo %texte% la confiture.
    echo Veuillez patienter.
    PING -n 2 127.0.0.1 >nul
    cls
    echo %texte% la confiture.
    echo Veuillez patienter..
    PING -n 2 127.0.0.1 >nul
    cls
    echo %texte% la confiture.
    echo Veuillez patienter...
    PING -n 2 127.0.0.1 >nul
    set /a tip = tip + 1
    goto Fruit
    
    :Nutella
    set /a flux = flux + 1
    :Chocolat
    if %top%==2 goto Creme
    cls
    echo %texte% le Nutella.
    echo Veuillez patienter.
    PING -n 2 127.0.0.1 >nul
    cls
    echo %texte% le Nutella.
    echo Veuillez patienter..
    PING -n 2 127.0.0.1 >nul
    cls
    echo %texte% le Nutella.
    echo Veuillez patienter...
    PING -n 2 127.0.0.1 >nul
    set /a top = top + 1
    goto Chocolat
    
    :Gourmant
    set texte=Voici
    echo Choix non valide. Voulez vous du Nutella ET de la Confiture ?
    echo (oui/non)
    set Chx=null
    set /p Chx= Votre choix : 
    if %Chx%==oui goto Confiture
    goto Debut
    
    :Creme
    if "%Chx%" neq "oui" goto fin
    if %flux%==1 goto Nutella
    if "%flux%" equ "2" goto fin
    
    :fin
    cls
    echo !! Bon Appetit !!
    timeout /t 3 /nobreak >nul
    Exit
    0