[Batch] Problème
Résolu/Fermé
camille18
Messages postés
285
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
1 mars 2012
-
5 mars 2010 à 22:33
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 - 7 mars 2010 à 15:27
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 - 7 mars 2010 à 15:27
A voir également:
- [Batch] Problème
- Fichier batch - Guide
- Batch renommer une partie du nom de plusieurs fichiers - Guide
- Script .bat pour renommer des fichiers ✓ - Forum Autoit / batch
- Script batch utile ✓ - Forum Programmation
- Input batch - Forum Autoit / batch
6 réponses
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
131
6 mars 2010 à 02:58
6 mars 2010 à 02:58
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
camille18
Messages postés
285
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
1 mars 2012
14
6 mars 2010 à 09:35
6 mars 2010 à 09:35
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.
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
131
6 mars 2010 à 16:08
6 mars 2010 à 16:08
Bonjour,
Je te fournirai les explications demain car aujourd'hui je n'ai pas beaucoup de temps, je suis "d'anniversaire" .
A demain.
Je te fournirai les explications demain car aujourd'hui je n'ai pas beaucoup de temps, je suis "d'anniversaire" .
A demain.
camille18
Messages postés
285
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
1 mars 2012
14
6 mars 2010 à 17:06
6 mars 2010 à 17:06
Okey, pas de problème, merci beaucoup !!
Et passe une bonne anniversaire ! :)
Et passe une bonne anniversaire ! :)
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
131
7 mars 2010 à 03:44
7 mars 2010 à 03:44
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
camille18
Messages postés
285
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
1 mars 2012
14
7 mars 2010 à 10:22
7 mars 2010 à 10:22
Je te remercie beaucoup pour ton aide précieuse !! J'en attendais pas autant !
Je vais suivre tes conseils à lettre et faire de mon mieux pour améliorer ce programme :)
Merci Merci !
Avec tout sa, je vais pouvoir poursuivre ma programmation plus facilement :)
Cordialement.
Je vais suivre tes conseils à lettre et faire de mon mieux pour améliorer ce programme :)
Merci Merci !
Avec tout sa, je vais pouvoir poursuivre ma programmation plus facilement :)
Cordialement.
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
131
7 mars 2010 à 15:27
7 mars 2010 à 15:27
Bonjour,
Bon courage et merci pour ce retour.
A plus sur CCM, peut-être.
Bon courage et merci pour ce retour.
A plus sur CCM, peut-être.