Euh... Ouais ?!
Mon fichier .ini contient les lignes suivantes :
- Code: Select all
RocketDock
Executor
Mmhh... Le problème vient peut-être du ".exe" que tu ajoutes au nom des exécutables : feignasse comme je suis, je préfère le nom de l'image sans l'extension. Regarde bien la ligne du FOR dans le script : il y a une astérisque ( '*' ) après le %%A. Du coup, pour chaque ligne du fichier .ini, on tue tous les processus NomDuProcessus1*, puis tous les NomDuProcessus2*, etc. Pas la méthode la plus propre, mais c'est efficace (et le fichier .ini est plus "lisible" ).
Pour la petite histoire, j'aurais préféré passer les noms des processus à tuer en arguments du script, par exemple :
- Code: Select all
KillMyBackgroundedApps.bat RocketDock Executor
Mais, sans que je comprenne pourquoi, la boucle FOR chargée de traiter les arguments ne boucle qu'une fois (et ne traite donc que le premier argument).
Si tu es intéressé, voici le genre de code que ça donne (et qui ne marche donc pas) :
- Code: Select all
@ECHO OFF
:: Récupération de tous les arguments fournis au script
SET listeProcessus=%*
ECHO %listeProcessus%
:: Fermeture de chaque processus et de son arborescence
FOR /F "DELIMS= " %%A IN ( 'ECHO %listeProcessus%') DO TASKKILL /F /IM %%A* /T
:: Fin du script
:END
Exemple de sortie :
- Code: Select all
P:\LiberKey\MyApps\PSTools>Test.bat Toto Titi
Toto Titi
Erreur : le processus "Toto*" est introuvable.
P:\LiberKey\MyApps\PSTools>
La commande ECHO montre que la liste d'arguments est bien présente dans %listeProcessus%, TASKKILL est bien exécuté une fois et puis... c'est tout. Grmbl. D'où la solution du fichier .INI, plus galère qu'une simple liste de noms en arguments, mais qui à l'énorme avantage de fonctionner...