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 :

utilisation goto:eof avec call


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de julioclay
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 16
    Par défaut utilisation goto:eof avec call
    Bonjour et bonne année,

    J'ai un soucis avec les appels de bat et les goto :eof. je m'explique:

    Je dispose de plusieurs .bat qui s'appellent entre eux via la commande "call". Le truc c'est que je cherche un moyen de quitter mon script en cours (rendre la main) en utilisant "goto :eof". Mais le problème (vous l'aurez compris?) c'est que lorsque j'utilise "goto :eof" dans un .bat il quitte ce .bat en cours et reviens au .bat qui l'a appelé. Petit exemple avec 3 batchs (a.bat b.bat c.bat):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a.bat appelle b.bat via "call"
    b.bat appelle c.bat via "call"
    c.bat utilise "goto :eof" => quitte c.bat mais retourne à b.bat!
    alors que je souhaiterais que ça quitte tout simplement et à tout moment lorsque "goto :eof" est utilisé!!

    L'aide sur la commande "call" est assez obscure:

    "Un nouveau contexte de fichier de commandes est créé avec les arguments
    spécifiés et le contrôle est transmis à la commande suivant l'étiquette
    spécifiée. Vous devez "quitter" deux fois en atteignant la fin du script du
    fichier de commandes deux fois. La première fois que vous lisez la fin, le
    contrôle reviendra juste après la commande CALL. La seconde fois vous
    quitterez le script de commandes.
    "

    Sur internet j'ai pas trouvé non plus de référence à ça...

    Quelqu'un a une astuce pour palier à ça?

    Merci par avance pour les réponses.
    Julien.

  2. #2
    Membre averti Avatar de julioclay
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 16
    Par défaut
    Up

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut
    Le passage que tu cites semble plutôt parler de l'appel de routines (ou labels) avec call, qui consiste en quelque sorte à réouvrir le script en cours en commençant directement au label indiqué : dans ce cas, le script s'étant auto-appelé, il doit effectivement se terminer deux fois (je ne sais pas si je suis plus clair que la doc : il faudrait un exemple, mais ce serait hors-sujet)

    La page suivante (en anglais) explique assez bien le fonctionnement de call :
    http://www.robvanderwoude.com/call.php

    Pour le problème mentionné, le comportement décrit correspond à ce qu'on attend effectivement : le "goto :eof" va à la fin de "c.bat" et quand ce script se termine on est bien censé revenir dans "b.bat", à cause justement de l'utilisation de "call"

    Es-tu obligé d'utiliser "call" ? Un appel de "b.bat" depuis "a.bat" (resp. un appel de "c.bat" depuis "b.bat"), en omettant l'utilisation de "call", aura l'effet voulu si dans tous les cas ou "b.bat" (resp. "c.bat") se termine il faut quitter sans revenir dans le script appelant.

    Une autre solution (non testée) permettant de déterminer quand on termine tout et quand on revient dans le script appelant, serait :
    • dans "c.bat" :
      • utiliser "exit /b 1" au lieu "goto :eof"

      • utiliser "exit /b 0" en cas de fin "normale" de "c.bat" (i.e. si on veut que "b.bat" se poursuive), y compris à la fin du script

    • dans "b.bat" :
      • après la ligne "call c.bat", ajouter une ligne "if ERRORLEVEL 1 exit /b 1"

      • utiliser "exit /b 0" en cas de fin "normale" de "b.bat" (i.e. si on veut que "a.bat" se poursuive), y compris à la fin du script

    • dans "a.bat" :
      • après la ligne "call b.bat", ajouter une ligne "if ERRORLEVEL 1 exit /b 1" ou "if ERRORLEVEL 1 exit /b" si tu ne veux pas récupérer un code sortie


    Si on ne veut pas utiliser exit et ERRORLEVEL, on peut s'en sortir en ajoutant le positionnement d'une variable avec "set xxx=..." avant le "goto :eof" dans "c.bat", et en testant cette variable au moment du retour dans "b.bat" puis "a.bat" : "if %xxx%==... goto :eof"

  4. #4
    Membre averti Avatar de julioclay
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 16
    Par défaut
    Citation Envoyé par cedricchaillou Voir le message
    • dans "c.bat" :
      • utiliser "exit /b 1" au lieu "goto :eof"

      • utiliser "exit /b 0" en cas de fin "normale" de "c.bat" (i.e. si on veut que "b.bat" se poursuive), y compris à la fin du script

    • dans "b.bat" :
      • après la ligne "call c.bat", ajouter une ligne "if ERRORLEVEL 1 exit /b 1"

      • utiliser "exit /b 0" en cas de fin "normale" de "b.bat" (i.e. si on veut que "a.bat" se poursuive), y compris à la fin du script

    • dans "a.bat" :
      • après la ligne "call b.bat", ajouter une ligne "if ERRORLEVEL 1 exit /b 1" ou "if ERRORLEVEL 1 exit /b" si tu ne veux pas récupérer un code sortie
    Nickel!! Merci cedric pour cette astuce avec "exit /b 1" et "errorlevel"!!

    Bonne journée

Discussions similaires

  1. utilisation variable avec Call
    Par DD339 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 06/08/2009, 15h14
  2. Utiliser DirectX 9 avec C++Builder
    Par Olivier Constans dans le forum DirectX
    Réponses: 2
    Dernier message: 27/06/2005, 11h30
  3. utilisation de dll avec diverses compilateurs
    Par Thylia dans le forum C++
    Réponses: 30
    Dernier message: 21/10/2004, 16h30
  4. utilisation de fetch avec select
    Par arwen dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/06/2003, 10h03
  5. Utiliser Borland C++ avec Emacs sous Windows
    Par Eikichi dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 02/03/2003, 08h40

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