NEQ mettre plusieurs variables

Résolu
Deewy - Modifié le 23 déc. 2023 à 20:11
 Jin - 26 déc. 2023 à 13:52

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

jee pee Messages postés 39661 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 28 avril 2024 9 241
23 déc. 2023 à 20:12

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
jee pee Messages postés 39661 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 28 avril 2024 9 241
23 déc. 2023 à 20:45

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
brucine Messages postés 14344 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 29 avril 2024 1 820
24 déc. 2023 à 08:21

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

D'accord merci 

0
Jin > brucine Messages postés 14344 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 29 avril 2024
24 déc. 2023 à 18:13

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
jee pee Messages postés 39661 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 28 avril 2024 9 241 > Jin
24 déc. 2023 à 18:20

oui, pourquoi faire simple quand on peut faire compliqué

0

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