![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| Scripts/Batch Forum d'entraide sur la programmation de scripts Batch et Powershell sous Windows. |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Futur Membre du Club
![]() Date d'inscription: novembre 2006
Localisation: Nantes
Messages: 38
|
Bonjour à tous !
J'ai fais du batch il y a quelques années mais j'ai un peu perdu tout ça ... En tout cas je pense que c'est le langage le plus simple à utiliser pour ce que j'aimerais faire : En fait, je fais tourner un serveur de jeux en ligne sur mon PC. Pou cela, je dois lancer deux fichiers exécutables, l'un après l'autre. Ces fichiers ne doivent jamais être interrompus pour que le serveur puisse tourner. Mais il arrive quelques fois que l'un d'entre eux se ferme tout seul (souvent des bugs dans les requêtes sql par exemple ...). Appelons les deux fichiers, dans leur ordre de lancement (l'un doit être lancé avant l'autre), fichier1.exe et fichier2.exe. J'aimerais donc créer un petit fichier .bat qui ferait : - Vérification que fichier1.exe ET/OU fichier2.exe sont ouverts. - Fermer le ou les fichier(s) reconnu(s) comme ouvert(s). - Lancer fichier1.exe. - Lancer fichier2.exe. Voila ! J'ai lu la FAQ, il y a les commandes, mais c'est simplement que je ne sais plus du tout comment coder en Batch, donc pas facile à mettre en forme Ca doit être simple pour vous je pense ! ^^ Je me souviens de la commande "start", mais si je mets : Code :
start fichier1.exe start fichier2.exe Je vous remercie par avance ! Dernière modification par Petrucci ; 31/08/2008 à 15h14 |
|
|
|
|
|
#6 (permalink) |
|
Membre éclairé
![]() Date d'inscription: mai 2007
Messages: 316
|
Dans ce cas, tu as tout le nécessaire pour faire ce que tu souhaites.
tasklist te permet de savoir quelles sont les applications en cours d'exécution. taskkill sert à mettre fin au programme de ton choix find à rechercher une chaine. start à lancer une application et si tu as besoin d'un délai par exemple de deux secondes entre les deux lancements tu peux utiliser: Code :
ping -n 2 127.0.0.1 > NUL Code :
LaCommande /? |
|
|
|
|
|
#7 (permalink) |
|
Futur Membre du Club
![]() Date d'inscription: novembre 2006
Localisation: Nantes
Messages: 38
|
Merci !
J'avoue ne pas avoir beaucoup de temps en ce moment pour ré-apprendre l'algo des batch et comment l'utiliser ... Mais si vous voulez vraiment pas le faire alors j'essaierai quand je pourrais Je viens d'avoir une autre idée : Est-ce possible de créer un programme ouvert en permanence, et qui puisse détecter si justement mes fichier1.exe et fichier2.exe sont fermés ? (genre toutes les 30secondes). Et si l'un des deux est fermé, il le relance ! Voila, merci en tout cas de tes réponses maxim_um |
|
|
|
|
|
#8 (permalink) | |
|
Membre éclairé
![]() Date d'inscription: mai 2007
Messages: 316
|
Citation:
Oui, c'est tout à fait possible. L'idéal serait de faire un service pour Windows qui prendra en charge ce que tu souhaites et dont le fonctionnement serait événementiel et non basé sur un Timer. Maintenant si tu n'as pas de notions en programmation, avec un script de commande tu peux aussi t'en sortir pour peu que tu fasses un effort de quelques minutes. |
|
|
|
|
|
|
#9 (permalink) | ||
|
Futur Membre du Club
![]() Date d'inscription: novembre 2006
Localisation: Nantes
Messages: 38
|
Citation:
Citation:
Je tiendrait ce topic à jour pour montrer si j'ai avancé. |
||
|
|
|
|
|
#10 (permalink) |
|
Membre éclairé
![]() Date d'inscription: mai 2007
Messages: 316
|
En effet, d'après ce que tu écris un script de commande semble plus adapté à tes capacités actuelles.
Saches dans la foulée que tu dois tirer un trait sur le mode événementiel qui lui nécessite une réelle programmation et la production d'une dll ou d'un exécutable qui doit être intégré à Windows. Cela dit avec un script ça marche bien. Une fois que tu auras montré une réelle motivation d'apprentissage et que tu auras produit quelques lignes de "code", tu pourras prétendre à un soutien plus approfondi avec de différentes suggestions de la part des différents intervenants, et ce jusqu'à l'obtention d'un script stable qui est en parfaites adéquations avec ton besoin. Aussi, il ne faut pas que tu te décourages, il n'est en aucun cas question ici d'apprendre de l'algorithme ou je ne sais quoi d'autres, mais simplement de savoir utiliser les commandes mises à disposition par le système pour générer un script fonctionnel. L'aide en ligne fournit toutes les informations nécessaires et c'est pour cela qu'il ne s'agit que d'une affaire de quelques minutes le temps d'un effort de lecture. Voilà, bonne continuation à toi. |
|
|
|
|
|
#11 (permalink) |
|
Futur Membre du Club
![]() Date d'inscription: novembre 2006
Localisation: Nantes
Messages: 38
|
Ok, je vais m'y mettre dès que la rentrée sera bien entammée (j'entre en DUT Informatique d'ailleurs
En tout cas merci de toutes ces infos maxim_um ! Au passage, si une âme charitable se sent d'attaque pour me mâcher le travail un petit coup ... ![]() Bon ok je sors |
|
|
|
|
|
#12 (permalink) |
|
Futur Membre du Club
![]() Date d'inscription: novembre 2006
Localisation: Nantes
Messages: 38
|
Bon j'ai fait ce petit test :
Code :
TaskList | findstr /c:fichier1.exe > nul If %errorlevel%== 0 taskkill /im fichier1.exe taskkill /im fichier2.exe If %errorlevel%== 1 TaskList | findstr /c:fichier2.exe > nul If %errorlevel%== 0 taskkill /im fichier1.exe taskkill /im fichier2.exe start fichier1.exe ping -n 2 127.0.0.1 start fichier2.exe C'est un problème de fin de condition je pense, mais je vois pas bien comment le régler là Dernière modification par Petrucci ; 06/09/2008 à 01h31 |
|
|
|
|
|
#14 (permalink) |
|
Futur Membre du Club
![]() Date d'inscription: novembre 2006
Localisation: Nantes
Messages: 38
|
Merci de cette précision !
Donc après des modifs j'arrive à ça : Code :
TaskList | findstr /c:fichier1.exe > nul If %errorlevel%== 0. taskkill /im fichier1.exe. taskkill /im fichier2.exe. Else TaskList | findstr /c:fichier2.exe > nul. If %errorlevel%== 0. taskkill /im fichier1.exe. taskkill /im fichier2.exe. start fichier1.exe ping -n 2 127.0.0.1 start fichier2.exe |
|
|
|
|
|
#15 (permalink) |
![]() Date d'inscription: avril 2006
Localisation: Aveyron, France
Âge: 22
Messages: 1 531
|
Enleve les points après tous tes fichier1.exe, fichier2.exe.
Sépare les différentes commandes taskkill par un caractère "&". Exemple de ligne qui fonctionne chez moi (ferme le notepad et la calculette dans tous les cas) : Code :
if 0==0 taskkill /im notepad.exe & taskkill /im calc.exe
\______________________/ \___________________/
commande 1 commande 2
____ --> condition _ --> séparateurs des commandes
|
|
|
|
![]() |
![]() |
||
Lancement de deux .exe
|
||
| Outils de la discussion | |
|
|