IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Comportement de la commande SET /p


Sujet :

Scripts/Batch

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut Comportement de la commande SET /p
    Bonjour à tous

    Je cherche à contrôler la saisie qui est enregistrée à l'aide de la commande SET /P

    En cas de chaine vide, si j'appuie sur Enter à l'invite de saisie, le résultat est satisfaisant et le branchement s'opère bien.

    Par contre, si on saisit un espace suivi de Enter, le script s'arrête brutalement.

    Savez-vous gérer le résultat de cette saisie particulière mais néanmoins possible ?

    Voici le code d'essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
    Echo off
    cls
    
    :action 
    SET /P leave=Veuillez taper 1 xxxx, 2 pour xxxx et 3 pour xxxx : 
    
    IF '%leave%' == '1' GOTO Un
    IF '%leave%' == '2' GOTO Deux
    IF '%leave%' == '3' GOTO Trois 
    IF "%leave%" == "" GOTO Enter 
    
    : Un
    Echo Tu viens de taper 1
    Pause
    Goto action
    
    : Deux
    Echo Tu viens de taper 2
    Pause
    Goto action
    
    : Trois
    Echo Tu viens de taper 3
    Pause
    Goto action
    
    : Enter
    Echo Tu viens de taper sur Enter
    Pause
    Goto action
    
    Rem Fin de programme
    Merci de votre aide

  2. #2
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    SALUT,

    les modifications:

    - déclarer l'espace dans la condition IF
    - SET leave= avant la commande de saisie SET /P "videra" la variable..
    - et pour finir un goto :action à la suite des instructions IF

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Echo off
    cls
    
    :action
    Set leave=
    SET /P leave=Veuillez taper 1 xxxx, 2 pour xxxx et 3 pour xxxx :
    Rem for /f " " in "leave" do pause
    
    IF "%leave%" == " " GOTO SPACE
    IF "%leave%" == "" GOTO Enter
    IF '%leave%' == '1' GOTO Un
    IF '%leave%' == '2' GOTO Deux
    IF '%leave%' == '3' GOTO Trois
    GOTO :action
    
    
    
    : Un
    Echo Tu viens de taper 1
    Pause
    Goto action
    
    : Deux
    Echo Tu viens de taper 2
    Pause
    Goto action
    
    : Trois
    Echo Tu viens de taper 3
    Pause
    Goto action
    
    : Enter
    Echo Tu viens de taper sur Enter
    Pause
    Goto action
    
    : SPACE
    Echo Tu viens de taper sur SPACE
    Pause
    Goto action
    
    Rem Fin de programme
    PS: vous n'avez pas besoin des branchements goto dans votre code un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IF [condition1] [action1]
    IF [condition2] [action2]

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    Merci de ta réponse I am Here

    Ton écriture est bien plus élégante et légère. J'ai donc réécrit le script sous la forme préconisée.

    Mais ... Ce script est sensé être une boucle dont tu ne sors jamais.

    A la première frappe d'un espace, il réagit bien et remonte au prompt.
    A la deuxième frappe d'un espace il devrait y avoir la même réaction mais non ... le script se termine. Alors que ce n'est pas le cas si je l'écris avec mes goto multiples comme plus haut. Curieux non ?

    Imaginons maintenant que l'utilisateur saisisse un espace et un 1 par exemple. Là la sortie du script est immédiate. Qu'en penses-tu ?

    Maitriser cette saisie par une boucle for ? Si oui as-tu une idée de la syntaxe qui conviendrait bien ?

    Voici le code réécrit et non encore stabilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Echo off
    cls
    
    :action 
    SET leave=
    SET /P leave=Veuillez taper 1 xxxx, 2 pour xxxx et 3 pour xxxx : 
     
    IF "%leave%" == " " Echo Tu viens de taper un espace & Pause
    IF '%leave%' == '1' Echo tu viens de taper 1 & Pause
    IF '%leave%' == '2' Echo tu viens de taper 2 & Pause
    IF '%leave%' == '3' Echo tu viens de taper 3 & Pause 
    IF "%leave%" == ""  Echo tu viens de taper Enter & Pause 
    
    GOTO action
    
    Rem Fin de programme

  4. #4
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    @Echo off
    cls
    
    :action 
    SET    leave=
    SET /P leave=taper 1,2,3 et q pour quitter : 
    
    
    IF    "%leave%"     == ""  Echo tu viens de taper Enter     &goto:action
    IF    "%leave:~-1%" == " " Echo Tu viens de taper un espace &goto:action
    IF    '%leave:~-1%' == '1' Echo tu viens de taper 1         &goto:action
    IF    '%leave:~-1%' == '2' Echo tu viens de taper 2         &goto:action
    IF    '%leave:~-1%' == '3' Echo tu viens de taper 3         &goto:action
    IF /I '%leave:~-1%' == 'q'                                   goto:exiton
    GOTO                                                             :action
    
    Rem Fin de programme
    :exiton

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    Merci I'm Here

    Ton code est robuste et il marche bien.

    Je n'avais pas pensé à formater la variable, ce qui résout le problème au moins pour une variable avec 1 caractère.

    Pour te parler du contexte : Je suis en train d'écrire un utilitaire complet de sauvegarde à la volée et incrémentielle avec choix multi support sur USB (Clés, disques durs) en donnant le choix du périphérique à l'utilisateur. Cela passe par la reconnaissance des périphériques de stockages connectés et de leur affichage à la console (Test par la commande vol sur les 26 lettres de l'alphabet).

    Bien sûr, pour faire un script propre je souhaite encadrer la saisie du choix, d'où ma question.

    Dès que ce script sera terminé et testé, J'aurais le plaisir de t'en faire profiter

    En tout cas merci de ton concours. Je reviens ces jours prochains avec l'utilitaire terminé

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    Je vois que tu viens de modifier ton code ...

    Un grand espace entre SET et la variable ?

    Je ne vais pas pouvoir tester ce soir. J'ai encore plein de dossiers à terminer.

Discussions similaires

  1. WMIC et la commande SET pour update
    Par jedu75 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 25/05/2011, 10h23
  2. commande set inoperante sur character_set
    Par jean-michel-78 dans le forum Requêtes
    Réponses: 3
    Dernier message: 22/05/2011, 21h31
  3. Comportement d'une Commande ..
    Par Assurant dans le forum Linux
    Réponses: 2
    Dernier message: 08/01/2010, 00h33
  4. Problème avec la commande Set
    Par watiero dans le forum Scripts/Batch
    Réponses: 11
    Dernier message: 03/09/2008, 15h37
  5. Equivalent de la commande "SET" sous Oracle pour MySQL
    Par f1vincent dans le forum Outils
    Réponses: 4
    Dernier message: 21/12/2006, 21h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo