Fichier .bat avec IF successifs [Résolu] - API Win32 - Programmation
Marsh Posté le 13-08-2012 à 22:27:52
Je pense que tes set /P CONFIRMATION doivent être dans les () du if:
Code :
|
Marsh Posté le 13-08-2012 à 22:46:19
Salut, merci de ta réponse.
J'ai essayé, ça me parait cohérant, mais malheureusement il y a encore quelque chose qui cloche. L'idéal serait que tu testes le résultat, en fait quand je réponds "Oui" à chacune des confirmations, il dit que ce choix n'existe pas. Quand je réponds "Non", il va au choix correspondant alors que je n'ai pas donné ma confirmation...
Marsh Posté le 14-08-2012 à 01:35:40
Nico150394 a écrit : Salut, merci de ta réponse. |
Après test, on dirait que quand il nous demande de taper oui/non, peu importe ce qu'on tape la première fois, ça passe pas mais si on recommence ça marche.
C'est comme si set /P CONFIRMATION= ne fonctionnait pas du premier coup!
(encore que il m'affiche toujours CHOIX2 ?)
Marsh Posté le 14-08-2012 à 01:48:13
C'est bizarre, non ? Perso je vois pas où est l'erreur... Si t'as une autre idée je suis preneur
Marsh Posté le 30-08-2012 à 12:15:44
Nico150394 a écrit : C'est bizarre, non ? Perso je vois pas où est l'erreur... Si t'as une autre idée je suis preneur |
En fait, ton problème est assez simple :
De base, tu ne peux pas imbriquer plusieurs IF/FOR sous DOS à cause de la manière dont il interprète ses variables.
Pour ça, il faut que tu utilises l'option setlocal ENABLEDELAYEDEXPANSION qui te laisse utiliser le caractère supplémentaire "!" pour déclarer tes variables dans tes imbrications de fonctions.
En gros, ça donne à peu près ça :
Code :
|
Marsh Posté le 31-08-2012 à 15:54:12
Merci beaucoup ça marche si j'ai bien compris la commande setlocal ENABLEDELAYEDEXPANSION autorise le "!" et il faut pour cela utiliser if /I et non pas if tout seul qui lui utilise le "%". C'est ça ? Du coup il n'est pas possible d'utiliser plus de 2 variables en même temps, si ?
Marsh Posté le 31-08-2012 à 19:48:19
Alors, l'option /I te permet d'ignorer la casse, tu peux donc taper ta réponse aussi bien en minuscule qu'en majuscule.
En fait, le problème n'est pas d'imbriquer tes if, car ça, DOS sait le faire.
C'est la déclaration de variables à l'intérieur de ces fonctions qui lui pose problème.
ENABLEDELAYEDEXPANSION indique en fait à l'interpréteur de commande qu'il doit interprêter les variables au moment de l'exécution et non au moment ou il parse le script. Sinon, on se retrouve avec des erreurs de syntaxe parce que l'interpréteur de commandes DOS cherche à interprêter les variables contenues dans ta fonction avant même qu'elles ne soient initialisées.
Et grâce à cette option, tu peux imbriquer tes déclarations de variables dans autant de if ou de for que tu veux (bon, là je m'avance un peu, je n'ai jamais testé plus de cinq en fait).
Edit : un petit exemple à deux balles qui prouve que ça marche :
Code :
|
Marsh Posté le 12-08-2012 à 17:23:05
Salut à tous,
Je suis actuellement sur un fichier bat qui me permet d'automatiser la récupération de sauvegardes de ma progression dans un jeu. Ça c'était pour la petite histoire Voici ce que je voudrais que l'une des parties de mon programme fasse pour moi :
Choix 1 ou Choix 2
Quel que soit le choix, demande de confirmation.
Si confirmation, continuer vers le choix en question, sinon (annonce que le choix rentré n'existe pas et) retour à la proposition de choix .
Voilà ça tient en 3 lignes, voici maintenant le programme simplifié (je ne le mets pas entre balises de code parce que ça me fait n'importe quoi avec les tabulations) :
@echo off
:CHOIX
cls
echo Que voulez-vous faire ?
echo 1. Choix 1
echo 2. Choix 2
set /P REPONSE=
IF "%REPONSE%"=="1" set /P CONFIRMATION="Etes-vous sur de votre choix 1 ? Si oui, tapez "oui", si non taper "non"."
IF "%CONFIRMATION%"=="Oui" (
goto CHOIX1
) ELSE (
IF "%CONFIRMATION%"=="Non" (
goto CHOIX
) ELSE (
echo.
echo Ce choix n'existe pas.
pause
goto CHOIX
)
)
)
IF "%REPONSE%"=="2" set /P CONFIRMATION="Etes-vous sur de votre choix 2 ? Si oui, tapez "oui", si non taper "non"." (
IF "%CONFIRMATION%"=="Oui" (
goto CHOIX2
) ELSE (
IF "%CONFIRMATION%"=="Non" (
goto CHOIX
) ELSE (
echo.
echo Ce choix n'existe pas.
pause
goto CHOIX
)
)
)
:CHOIX1
cls
echo CHOIX1
pause
exit
:CHOIX2
cls
echo CHOIX2
pause
exit
Voilà le soucis c'est que le programme n'arrive visiblement pas à passer au cas où la variable "REPONSE" vaut "2". J'ai tout retourné dans tous les sens et je n'arrive pas à voir mon/mes erreur(s)
Quelqu'un pourrait-il m'éclairer ?
Merci d'avance
Nico150394
Message édité par Nico150394 le 03-09-2012 à 00:42:03