Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1409 connectés 

  FORUM HardWare.fr
  Programmation
  API Win32

  Fichier .bat avec IF successifs [Résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fichier .bat avec IF successifs [Résolu]

n°2153147
Nico150394
Posté le 12-08-2012 à 17:23:05  profilanswer
 

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 :na: 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) :pfff:  
 
Quelqu'un pourrait-il m'éclairer ?
 
Merci d'avance
 
Nico150394


Message édité par Nico150394 le 03-09-2012 à 00:42:03
mood
Publicité
Posté le 12-08-2012 à 17:23:05  profilanswer
 

n°2153218
breizhbugs
Posté le 13-08-2012 à 22:27:52  profilanswer
 

Je pense que tes  set /P CONFIRMATION  doivent être dans les () du if:

Code :
  1. @echo off
  2. :CHOIX
  3. cls
  4. echo Que voulez-vous faire ?
  5. echo 1. Choix 1
  6. echo 2. Choix 2
  7. set /P REPONSE=
  8. IF "%REPONSE%"=="1" (
  9.   set /P CONFIRMATION="Etes-vous sur de votre choix 1 ? Si oui, tapez "oui", si non taper "non"."
  10.   IF "%CONFIRMATION%"=="oui"  (
  11.     goto CHOIX1
  12.   )   ELSE  (
  13.     IF "%CONFIRMATION%"=="non"    (
  14.       goto CHOIX
  15.     )    ELSE    (
  16.       echo.
  17.       echo Ce choix n'existe pas.
  18.       pause
  19.       goto CHOIX
  20.     )
  21.   )
  22. )
  23. IF "%REPONSE%"=="2" (
  24.   set /P CONFIRMATION="Etes-vous sur de votre choix 2 ? Si oui, tapez "oui", si non taper "non"."
  25.   IF "%CONFIRMATION%"=="oui"  (
  26.     goto CHOIX2
  27.   )  ELSE  (
  28.     IF "%CONFIRMATION%"=="non"    (
  29.       goto CHOIX
  30.     )    ELSE    (
  31.        echo.
  32.        echo Ce choix n'existe pas.
  33.        pause
  34.        goto CHOIX
  35.     )
  36.   )
  37. )
  38. :CHOIX1
  39. cls
  40. echo CHOIX1
  41. pause
  42. exit
  43. :CHOIX2
  44. cls
  45. echo CHOIX2
  46. pause
  47. exit


---------------
Seul Google le sait...
n°2153220
Nico150394
Posté le 13-08-2012 à 22:46:19  profilanswer
 

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...

n°2153223
breizhbugs
Posté le 14-08-2012 à 01:35:40  profilanswer
 

Nico150394 a écrit :

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...


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 ?)


Message édité par breizhbugs le 14-08-2012 à 01:39:52

---------------
Seul Google le sait...
n°2153224
Nico150394
Posté le 14-08-2012 à 01:48:13  profilanswer
 

C'est bizarre, non ? Perso je vois pas où est l'erreur... Si t'as une autre idée je suis preneur ;)

n°2155060
Neji Hyuga
:grut:
Posté le 30-08-2012 à 12:15:44  profilanswer
 

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 :
  1. ::#!\bin\ksh :-)
  2. :: Permet a DOS d'interpreter correctement ses variables...
  3. setlocal ENABLEDELAYEDEXPANSION
  4. :: set +x a la M$
  5. @echo off
  6. :: Menu principal
  7. :MENU
  8. cls
  9. echo Que voulez-vous faire ?
  10. echo 1. Choix 1
  11. echo 2. Choix 2
  12. :: Choix utilisateur
  13. set /P _REPLY_=
  14. :: Cas premier choix
  15. if  %_REPLY_% EQU 1 (
  16. :: Confirmation utilisateur
  17. set /P _CONFIRM_= Etes vous sur de vouloir selectionner le choix 1 [O/N] ?
  18. :: Utilisation du caractere "!"
  19. if /I !_CONFIRM_! EQU O (
  20.  goto CHOIX1) else (
  21.   :: Ni oui ni non
  22.   if /I !_CONFIRM_! NEQ N (
  23.    echo Ce choix n'existe pas.
  24.    pause)
  25.   :: Cas different de OUI on retourne forcement au menu principal
  26.   goto MENU)
  27. )
  28. :: Cas second choix
  29. if  %_REPLY_% EQU 2 (
  30. :: Confirmation utilisateur
  31. set /P _CONFIRM_= Etes vous sur de vouloir selectionner le choix 2 [O/N] ?
  32. :: Utilisation du caractere "!"
  33. if /I !_CONFIRM_! EQU O (
  34.  goto CHOIX2) else (
  35.   :: Ni oui ni non
  36.   if /I !_CONFIRM_! NEQ N (
  37.    echo Ce choix n'existe pas.
  38.    pause)
  39.   :: Cas different de OUI on retourne forcement au menu principal
  40.   goto MENU)
  41. )
  42. :: Etiquette choix 1
  43. :CHOIX1
  44. cls
  45. echo CHOIX1
  46. pause
  47. exit
  48. :: Etiquette choix 2
  49. :CHOIX2
  50. cls
  51. echo CHOIX2
  52. pause
  53. exit


Message édité par Neji Hyuga le 31-08-2012 à 08:57:55
n°2155228
Nico150394
Posté le 31-08-2012 à 15:54:12  profilanswer
 

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 ?

n°2155244
Neji Hyuga
:grut:
Posté le 31-08-2012 à 19:48:19  profilanswer
 

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 :
  1. setlocal ENABLEDELAYEDEXPANSION
  2. @echo off
  3. echo Croyez vous que DOS soit capable d'imbriquer trois fonctions "if" ?
  4. set /P _rep_1_=
  5. if /I %_rep_1_% EQU O (
  6. echo Ok, jusque la c'est normal que ca fonctionne.
  7. set /p _rep_2_= Deuxieme tentative ?
  8. if /I !_rep_2_! EQU O (
  9.  echo Wow, merci ENABLEMACHINTRUC !
  10.  set /P _rep_3_= On tente encore plus d'acrobaties ?
  11.  if /I !_rep_3_! EQU O (
  12.   echo Wouhaaa la je suis impressione !
  13.   set /P _rep_4_= Allez, encore un coup ?
  14.   if /I !_rep_4_! EQU O (
  15.   echo MER IL ET FOU !!)
  16.  )
  17. )
  18. )


Message édité par Neji Hyuga le 31-08-2012 à 19:56:16
n°2155328
Nico150394
Posté le 03-09-2012 à 00:41:17  profilanswer
 

Nickel merci beaucoup ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  API Win32

  Fichier .bat avec IF successifs [Résolu]

 

Sujets relatifs
Télécharger images dont liens contenu dans fichier txt ou autreCopier collet fichier les plus recents ?
Fenêtre fichier exécutable FotranEdition de Fichier Word
Macro sur plusieurs fichier Excel d'un même répertoiresuppression de lignes dans un fichier
[RESOLU] php script affichage fichierRecherche de fichier
[macro excel] emplacement fixe mais nom de fichier changeantDuplicate content pour un même fichier avec et sans extension ?
Plus de sujets relatifs à : Fichier .bat avec IF successifs [Résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR