[Batch] Problème
Résolu
camille18
Messages postés
285
Date d'inscription
Statut
Membre
Dernière intervention
-
cchristian Messages postés 921 Date d'inscription Statut Membre Dernière intervention -
cchristian Messages postés 921 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Alors voila, je suis en train de créé un petit programme (histoire de m'occuper un peu ^^) qui contient un menu avec utilisation de plusieurs pages. Le problème est que dans le code ci dessous ont peux mettre qu'un seul set PAGE=x dans la %PAGE%==0. C'est pourquoi j'aurais aimé savoir si il existait un moyen de contourner ce problème.
Merci d'avance !! =D
Cordialement.
Code du programme en cours :
@echo off
Title Ressurection
mode con cols=100 lines=50 &color 0A
set AFFICHAGE= By Geek !!
set LAPAGE=TRUE
set PAGE=0
:UP
cls
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º º
echo º %AFFICHAGE% º
echo º º
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo.
if %LAPAGE%==TRUE (
set LAPAGE=FALSE
set AFFICHAGE= xD Good !!
)
if %PAGE%==0 (
echo 1. Changer de mot de passe
echo.
echo 2. Supprimer session
echo.
echo 3. eteindre son ordinateur
echo.
echo.
set /p REP= Que desirez vous faire ?
set PAGE=1
goto :UP
)
if %PAGE%==1 (
if %REP%==1 (
set PAGE=2
set /p NOMADMIN=Veuillez indiquer le nom de l'administrateur en question \\:
goto :UP
))
if %PAGE%==1 (
if %REP%==o (
set page=1
))
if %PAGE%==2 (
net user %NOMADMIN% *
echo.
echo.
echo.
echo.
echo.
echo.
set /p REC= 1. Appuyer sur [Entree] pour retourner au menu.
echo.
start Ressurection
exit
)
if %PAGE%==3 (
if %REP%==3 (
set /p ARRET=Choisisser le nombre de secondes avant l'arret de votre ordinateur \\:
set PAGE=4
goto :UP
)
if %PAGE%==4 (
echo Votre ordinateur va s'arreter dans le temps impartis.
shutdown -s -t %ARRET% -c "Votre ordinateur va s'arreter dans quelques instants"
goto :UP
))
pause>nul
Alors voila, je suis en train de créé un petit programme (histoire de m'occuper un peu ^^) qui contient un menu avec utilisation de plusieurs pages. Le problème est que dans le code ci dessous ont peux mettre qu'un seul set PAGE=x dans la %PAGE%==0. C'est pourquoi j'aurais aimé savoir si il existait un moyen de contourner ce problème.
Merci d'avance !! =D
Cordialement.
Code du programme en cours :
@echo off
Title Ressurection
mode con cols=100 lines=50 &color 0A
set AFFICHAGE= By Geek !!
set LAPAGE=TRUE
set PAGE=0
:UP
cls
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º º
echo º %AFFICHAGE% º
echo º º
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo.
if %LAPAGE%==TRUE (
set LAPAGE=FALSE
set AFFICHAGE= xD Good !!
)
if %PAGE%==0 (
echo 1. Changer de mot de passe
echo.
echo 2. Supprimer session
echo.
echo 3. eteindre son ordinateur
echo.
echo.
set /p REP= Que desirez vous faire ?
set PAGE=1
goto :UP
)
if %PAGE%==1 (
if %REP%==1 (
set PAGE=2
set /p NOMADMIN=Veuillez indiquer le nom de l'administrateur en question \\:
goto :UP
))
if %PAGE%==1 (
if %REP%==o (
set page=1
))
if %PAGE%==2 (
net user %NOMADMIN% *
echo.
echo.
echo.
echo.
echo.
echo.
set /p REC= 1. Appuyer sur [Entree] pour retourner au menu.
echo.
start Ressurection
exit
)
if %PAGE%==3 (
if %REP%==3 (
set /p ARRET=Choisisser le nombre de secondes avant l'arret de votre ordinateur \\:
set PAGE=4
goto :UP
)
if %PAGE%==4 (
echo Votre ordinateur va s'arreter dans le temps impartis.
shutdown -s -t %ARRET% -c "Votre ordinateur va s'arreter dans quelques instants"
goto :UP
))
pause>nul
A voir également:
- [Batch] Problème
- Fichier batch - Guide
- Batch converter - Télécharger - Photo & Graphisme
- Batch renommer une partie du nom de plusieurs fichiers ✓ - Forum Autoit / batch
- Renommer tous les fichiers d'un dossier - Forum Windows
- Batch picture resizer - Télécharger - Divers Photo & Graphisme
6 réponses
Bonsoir,
ont peux mettre qu'un seul set PAGE=x dans la %PAGE%==0. C'est pourquoi j'aurais aimé savoir si il existait un moyen de contourner ce problème.
Je ne suis pas certain d'avoir bien compris ton problème. Je te propose cette solution (à améliorer....... Je n'ai pas voulu trop retoucher à ta logique):
ont peux mettre qu'un seul set PAGE=x dans la %PAGE%==0. C'est pourquoi j'aurais aimé savoir si il existait un moyen de contourner ce problème.
Je ne suis pas certain d'avoir bien compris ton problème. Je te propose cette solution (à améliorer....... Je n'ai pas voulu trop retoucher à ta logique):
@echo off SETLOCAL ENABLEDELAYEDEXPANSION SETLOCAL ENABLEEXTENSIONS Title Ressurection mode con cols=100 lines=50 &color 0A :INIT set "AFFICHAGE= By Geek !!" set LAPAGE=TRUE set /A PAGE=0 SET "REP=" SET "lib_ano=" :UP cls echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» echo º º echo º %AFFICHAGE% º echo º º echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ echo. echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ echo. if %LAPAGE%==TRUE ( set LAPAGE=FALSE set "AFFICHAGE= xD Good !!" ) if !PAGE!==0 ( echo 1. Changer de mot de passe echo. echo 2. Supprimer session echo. echo 3. eteindre son ordinateur echo. echo. ECHO !lib_ano!. set /p REP= Que desirez vous faire ? IF "!REP!" == "" ( SET "lib_ano= Choix errone. Saisissez 1, 2 ou 3" rem GOTO :UP ) ELSE ( set /A PAGE=1 ) goto :UP ) if !PAGE!==1 ( if "!REP!"=="1" ( set /A PAGE=2 set /p NOMADMIN=Veuillez indiquer le nom de l'administrateur en question \\: goto :UP )) rem Là je n'ai pas compris. J'ai ignoré la séquence. rem if %PAGE%==1 ( rem if "%REP%"=="o" ( rem set /A page=1 rem )) if !PAGE!==2 ( net user !NOMADMIN! * echo. & echo. & echo. & echo. & echo. & echo. set /p REC= 1. Appuyer sur [Entree] pour retourner au menu. echo. rem start Ressurection goto :INIT rem exit ) if !PAGE!==1 ( if "!REP!"=="3" ( set /p ARRET=Choisisser le nombre de secondes avant l'arret de votre ordinateur \\: set /A PAGE=4 goto :UP ) ) if !PAGE!==4 ( echo Votre ordinateur va s'arreter dans le temps impartis. shutdown -s -t %ARRET% -c "Votre ordinateur va s'arreter dans quelques instants" ) echo. & echo. & echo. & echo. & echo. & echo. ECHO FIN NORMALE DE %0 EXECUTE AVEC LE CHOIX !REP! pause>nul
Okey ! Sa marche impéc' =)
Merci beaucoup pour avoir pris du temps à régler mon problème !!
Je vais pouvoir poursuivre mon programme :)
J'aurais juste souhaité quelques explications sur les changements que tu as fais afin de mieux comprendre comment sa marche, si tu as encore du temps à m'accorder.
Bye bye, merci encore !!
Cordialement.
Merci beaucoup pour avoir pris du temps à régler mon problème !!
Je vais pouvoir poursuivre mon programme :)
J'aurais juste souhaité quelques explications sur les changements que tu as fais afin de mieux comprendre comment sa marche, si tu as encore du temps à m'accorder.
Bye bye, merci encore !!
Cordialement.
Bonsoir,
Voici, insérées dans le programme les explications promises. Si tu les estimes incomplètes n'hésite pas à me poser des questions, j'essaierai d'y répondre.
Quelques remarques : _______________________________________________________
_ Ta logique était (est) cohérente. Oriente toi maintenant vers la notion de sous-programmes internes (CALL :nom-de-sous-programme .....) ou externes (CALL nom-d'un-.bat ........) au programme en cours. Cela permet de structurer son programme et d'éviter, ou pour le moins, de minimiser les indicateurs et les GOTO.
_ Aère davantage to code notamment en ce qui concerne les IF imbriqués.
_ Commenteles séquences d'instructions.
Voici, insérées dans le programme les explications promises. Si tu les estimes incomplètes n'hésite pas à me poser des questions, j'essaierai d'y répondre.
@echo off :: Activation de l'expansion retardee des variables d'environnement. SETLOCAL ENABLEDELAYEDEXPANSION :: Activation des extensions de commandes. SETLOCAL ENABLEEXTENSIONS Title Ressurection mode con cols=100 lines=50 &color 0A :INIT set "AFFICHAGE= By Geek !!" set LAPAGE=TRUE SET "REP=" :: (Invite de commandes) HELP SET (1ère page): :: L'option /A spécifie que la chaîne à droite du signe égal est une :: expression numérique qui est évaluée. SET /A PAGE=0 :: L'affectation et la mise à nul comme ci-dessous d'une variable non numéri- :: que doit être comprise entre double quotes ("). Idem pour les tests. rem SET "REP=" SET "lib_ano=_" :: Le non respect de ces 2 regles (peut) engendre(r) des résultats imprévisibles :: notamment lors des tests mettant en oeuvre ces variables (voir plus bas). :UP cls echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» echo º º echo º %AFFICHAGE% º echo º º echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ echo. echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ echo. if %LAPAGE%==TRUE ( set LAPAGE=FALSE set "AFFICHAGE= xD Good !!" ) :: !...! (Invite de commandes) HELP SET (2ème page): ::Enfin, la prise en charge de l'expansion retardée de variables d'environnement :: a été ajoutée. Cette prise en charge est toujours désactivée par défaut.... :: Etudie l'exemple du help set, il résume le problème. :: set VAR=avant :: if "%VAR%" == "avant" ( :: set VAR=après :: if "%VAR%" == "après" @echo Cela marche si vous lisez ce message ) :: ............................. :: Pour illustrer ce propos change la ligne (situee plus bas apres set /p): :: IF "!REP!" == "" ( :: en :: IF "%REP%" == "" ( :: et fais un test. Bien que coherente, il te faudra valider (Touche enter) :: a 2 reprises ta saisie. :: Je pense, sans pouvoir preciser davantage, que nous nous trouvons en :: présence d'un cas analogue a celui cité dans le help. :: Pour m'affranchir de ces contraintes je programme toutes mes variables :: avec "!" au lieu de "%" apres avoir code : SETLOCAL ENABLEDELAYEDEXPANSION :: (Voir en debut de ce fichier). if %PAGE%==0 ( :: Si !PÄGE!=0, Affichage du menu gans le cas 1ere fois ou cas anomalie. echo 1. Changer de mot de passe echo. echo 2. Supprimer session echo. echo 3. eteindre son ordinateur echo. echo. :: Affichage systématique d'une ligne message (un "_" ou un message d'anomalie) ECHO !lib_ano! :: "...", regle ennoncee plus haut. Permet egalement de degager un espace final. set /p "REP= Que desirez vous faire ? " :: Test de présence d'une valeur effectivement saisie. Il conviendrait de :: poursuivre les contrôles notamment ceux de cohérence de la valeur effective- :: ment saisie (ici: 1, 2 ou 3). IF "!REP!" == "" ( rem Pour test: IF "%REP%" == "" ( :: message d'anomalie dans lib_ano pour prochain affichage. SET "lib_ano= Choix !REP! errone. Saisissez 1, 2 ou 3" ) ELSE ( :: saisie correcte. set /A PAGE=1 ) goto :UP ) ::Dans les 2 cas on affiche (a nouveau) le cartouche + le menu accompagne d'un :: message explicite si cas anomalie. :: "..." et !...!, regles ennoncees plus haut. if !PAGE!==1 ( if "!REP!"=="1" ( set /A PAGE=2 set /p NOMADMIN=Veuillez indiquer le nom de l'administrateur en question \\: :: A ajouter: Test de présence d'une valeur effectivement saisie. goto :UP )) if !PAGE!==2 ( net user !NOMADMIN! * echo. & echo. & echo. & echo. & echo. & echo. set /p REC= 1. Appuyer sur [Entree] pour retourner au menu. echo. goto :INIT :: remplace le START et l'exit. Il faut repatir au debut/ rem start Ressurection rem exit ) :: Ici la valeur de !PAGE! etait testee ==3. PAGE n'etait jamais initialisee :: a cette valeur dans le corps du programme. if !PAGE!==1 ( if "!REP!"=="3" ( set /p ARRET=Choisisser le nombre de secondes avant l'arret de votre ordinateur \\: set /A PAGE=4 goto :UP ) ) :: Le test suivant etait imbrique et subordonne au premier test lui-même :: incoherent. J'en ai fait 2 tests independants. if !PAGE!==4 ( echo Votre ordinateur va s'arreter dans le temps imparti. shutdown -s -t %ARRET% -c "Votre ordinateur va s'arreter dans quelques instants" ) echo. & echo. & echo. & echo. & echo. & echo. ECHO FIN NORMALE DE %0 EXECUTE AVEC LE CHOIX !REP! pause>nul
Quelques remarques : _______________________________________________________
_ Ta logique était (est) cohérente. Oriente toi maintenant vers la notion de sous-programmes internes (CALL :nom-de-sous-programme .....) ou externes (CALL nom-d'un-.bat ........) au programme en cours. Cela permet de structurer son programme et d'éviter, ou pour le moins, de minimiser les indicateurs et les GOTO.
_ Aère davantage to code notamment en ce qui concerne les IF imbriqués.
_ Commenteles séquences d'instructions.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question