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 :

Fichier bat pour lancer plusieurs applications


Sujet :

Scripts/Batch

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut Fichier bat pour lancer plusieurs applications
    Bonjour,

    J'ai réalisé une application client/serveur que je teste en local.
    A chaque fois que je veux tester, je dois faire ainsi:
    1. Je lance serveur.exe
    2. Je tappe "listen" dans l'invite du serveur, puis Entrée
    3. Je lance un client
    4. Je tappe "join" dans l'invite du client, puis Entrée
    5. Pareil avec des autres client.exe
    6. ...
    7. Je tappe "start" sur le serveur, puis Entrée
    8. Je peux enfin commencer les tests !

    Cela devient long car à chaque modif je dois tout lancer manuellement avant de pouvoir entrer dans les tests proprement parler.

    Je voudrais savoir s'il serait possible de faire un .bat qui lancerai par exemple 5 consoles (1 serveur et 4 clients) automatiquement.

    Merci !

  2. #2
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    Salut

    Évidemment! Avec la commande «start».

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Oui mais cependant, comme est ce que je fais pour simuler la saisie dans les fenêtre ouvertes ?
    Par exemple voici mon lanceur.bat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    start serveur.exe
    start client.exe
    start client.exe
    Il faudrait que je réaliser quelque chose comme ça plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    start serveur.exe
    [tapper "listen" dans "serveur.exe" puis Entrée]
    
    start client.exe
    [tapper "join" dans "client.exe" puis Entrée]
    
    start client.exe
    [tapper "join" dans "client.exe" puis Entrée]
    
    [tapper "start" dans "serveur.exe" puis Entrée]
    Et si cela est possible, il faudrait pouvoir différencier le premier "client.exe" lancé avec le second.
    Une idée ?

  4. #4
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    Je ne sais pas si tes applications acceptent les redirections, cela dit une solution serait de générer des scripts dynamiques que tu lancerais avec «start» depuis ton script principal. Chaque SD (script dynamique) contiendrait une instruction de type «title ...» pour la différenciation et des pipes «echo listen | serveur.exe» ou «serveur.exe < instruction.txt» pour la transmission des instructions. Sinon, une autre démarche serait le «sendKeys» de VbScript si les pipes ne sont pas acceptées.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Je suis vraiment novice dans ce domaine et je ne voie toujours pas comment faire !
    J'ai fait un teste avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo listen | serveur.exe
    Le serveur est lancé (dans la fenêtre du bat en revanche) et la commande est bien prise en compte. Seulement après le serveur tourne en boucle...

    Je ne sais pas ce qu'est un script dynamique et encore moins les "sendKeys de VbScript" (je ne sais pas coder en VB).

    Si j'ai bien compris, il n'y a pas une solution simple ?

  6. #6
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    Un script dynamique est généré ou écrit depuis un script principale afin d'obtenir plus d'une instance de la console ou d'éviter la multiplication des fichiers.

    Dans le cas qui te préoccupe, cela peut se traduire de la sorte:

    echo echo listen ^| serveur.exe > s.cmd
    start s.cmd
    ...
    del s.cmd
    Mais rien n'empêche d'écrire ce script à l'avance, mais là il perd son caractère dit dynamique.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    J'ai fait cela:

    debug.bat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    echo echo listen ^| serveur.exe > s.cmd
    echo echo join ^| client.exe > c1.cmd
    echo echo join ^| client.exe > c2.cmd
    
    start s.cmd
    start c1.cmd
    start c2.cmd
    
    
    stop c2.cmd
    stop c1.cmd
    stop s.cmd
    Cela semble fonctionner à moitié.
    En fait, les clients rejoignent bien le serveur, mais quand j'arrive sur l'invite de commande que ca soit pour le serveur, ou alors pour les clients, je n'ai pas la main. Je ne sais pas ce qu'il se passe, mais ça bouble à l'infinis.

    Par exemple, le serveur devrait fonctionner ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Serveur> listen
    Le serveur est en ecoute pour les clients.
    Serveur>
    Serveur> start
    Le serveur est lance.
    Là par exemple:
    1. J'ai tappé "listen" puis "Entrée"
    2. J'ai tappé "Entrée" sans aucune commande. Cela affiche à nouveau l'invite à la suite.
    3. J'ai tappé "start" puis Entrée.


    Or quand je lance avec le bat, le premier "listen" est bien interprété mais après ca boucle à l'infini. Comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Serveur> listen
    Le serveur est en ecoute pour les clients.
    Serveur> Serveur> Serveur> Serveur> Serveur> 
    Serveur> Serveur> Serveur> Serveur> Serveur> 
    Serveur> Serveur>
    Comment reprendre la main ?
    L'idée ça serait de lancer avec le même bat, mais il me faudrait une commande entre la série de start et stop pour que le bat me rende la main.

  8. #8
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    Citation Envoyé par FabaCoeur Voir le message
    J'ai réalisé une application client/serveur que je teste en local.
    Deux informations:

    Pour ce genre d'application il est toujours bon, pour ne pas dire indispensable, d'assurer une prise en charge des fichiers de commande (comme pour ftp.exe par exemple) afin de permettre l'automatisation.

    "stop" n'est pas le contraire de «start» et n'est pas une fonction de l'interpréteur de commande.

    Maintenant, il faudrait voir si les pipes fonctionnent correctement.

    t.cmd:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    title serveur
    echo listen& echo.& echo start | serveur.exe
    pause
    et voir ce que ça donne.



    Ou encore ceci: (vbs en vrac)

    iserveur.vbs: «start iserveur.vbs»

    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
    Set WsrtShell = WScript.CreateObject("WScript.Shell")
    WsrtShell.Run "cmd"
    WScript.Sleep 1000
    WsrtShell.SendKeys "title serveur~"
    WScript.Sleep 1000
    WsrtShell.SendKeys "cls~"
    WScript.Sleep 1000
    WsrtShell.SendKeys "serveur.exe~"
    WScript.Sleep 1000
    WsrtShell.SendKeys "listen~"
    WScript.Sleep 1000
    WsrtShell.SendKeys "~"
    WScript.Sleep 1000
    WsrtShell.SendKeys "start~"
    Set WsrtShell = Nothing

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Pour la solution avec t.cmd je n'ai pas compris la finalité.
    En tout cas, là le résultat c'est que ca ouvre le serveur avec "start" comme première commande et le serveur tourne en boucle sur l'invite comme décrit plus tôt.


    Sinon pour la solution VB ca semble convenir !
    J'ai fait cela:
    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
    Set WsrvShell = WScript.CreateObject("WScript.Shell")
    Set Wclt1Shell = WScript.CreateObject("WScript.Shell")
    Set Wclt2Shell = WScript.CreateObject("WScript.Shell")
    
    WsrvShell.Run "cmd"
    WScript.Sleep 100
    WsrvShell.SendKeys "title serveur~"
    WScript.Sleep 100
    WsrvShell.SendKeys "cls~"
    WScript.Sleep 100
    WsrvShell.SendKeys "serveur.exe~"
    WScript.Sleep 100
    WsrvShell.SendKeys "listen~"
    WScript.Sleep 1000
    
    Wclt1Shell.Run "cmd"
    WScript.Sleep 100
    Wclt1Shell.SendKeys "title client1~"
    WScript.Sleep 100
    Wclt1Shell.SendKeys "cls~"
    WScript.Sleep 100
    Wclt1Shell.SendKeys "client.exe~"
    WScript.Sleep 100
    Wclt1Shell.SendKeys "join~"
    WScript.Sleep 1000
    
    Wclt2Shell.Run "cmd"
    WScript.Sleep 100
    Wclt2Shell.SendKeys "title client2~"
    WScript.Sleep 100
    Wclt2Shell.SendKeys "cls~"
    WScript.Sleep 100
    Wclt2Shell.SendKeys "client.exe~"
    WScript.Sleep 100
    Wclt2Shell.SendKeys "join~"
    WScript.Sleep 1000
    
    WsrvShell.SendKeys "start~"
    
    Set Wclt2Shell = Nothing
    Set Wclt1Shell = Nothing
    Set WsrvShell = Nothing
    Ca m'ouvre bien mon serveur, ca le met en écoute et mes deux clients arrivent par la suite. Seule petit bémole, le "start" que j'ai mis à la fin n'est pas envoyé à la fenêtre du serveur, je le fais donc à la main mais ce n'est pas trop grave.

    Petite question: comment commenter du code dans un fichier vbs ?
    Comme ça je vais mettre 6 clients, et je pourrais changer le nombre en commentant / décommentant.
    A moins que tu m'indiques comment faire pour lancer le vbs avec un paramètre ou alors comment boucler sur mes lignes de client !

    Merci

  10. #10
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    Pour faire un commentaire en vbs il faut utiliser le guillemet simple «'»

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'ceci est un commentaire
    Pour le reste, moi j'aurais fait un script pour le serveur et un script générique pour les clients, générés dynamiquement depuis un script cmd avec des paramètres remplaçables. Dans ce cas y'a juste à donner le nombre de clients, et le script s'occupe du reste. Là forcément, ça te demandera un peu plus de travail, mais au final, je pense que ça représentera bien moins de temps que celui à passer à éditer, à commenté, à "décommenté" ou je ne sais quoi encore.

    Aussi, ne soit pas avare avec les délais. 100 c'est trop faible.

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Non je ne vais pas chercher plus longtemps là dessus, l'idée c'était de gagner du temps en lançant tout ça vite fait, là c'est quasiment ce que je voulais donc pas besoin de passer encore du temps à rechercher une meilleur solution.
    Je vais faire 4 vbs similaires à celui là avec 2, 3, 4 et 5 clients et ça répondra à toutes mes attentes.

    Merci pour le coup de main, cela va me faire gagner un temps précieux

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Script .bat pour lancer ou non une application
    Par alex_m94 dans le forum Windows Serveur
    Réponses: 7
    Dernier message: 02/07/2007, 11h01
  2. fonction pour lancer plusieurs scripts
    Par ricachu dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/08/2006, 15h33
  3. Réponses: 5
    Dernier message: 06/07/2006, 10h02
  4. Fonction pour lancer les applications standards
    Par black is beautiful dans le forum Windows
    Réponses: 4
    Dernier message: 08/03/2006, 15h47

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