J'ai un programme X.exe
qui prend environ 2-6 heures pour terminer. Le temps exact est inconnu, mais je voudrais mettre en place un seuil de 6,5 ou 7 heures. Si ce programme ne renvoie aucune valeur de ce laps de temps, il sera tué. Comment puis-je l'implémenter en utilisant les fichiers batch *.bat
?délai d'expiration ou de fermeture lorsque le processus est terminé
Voici ce que j'ai eu jusqu'à présent: une minuterie bat1.bat
et une réelle bat2.bat
.
bat1.bat:
start cmd /C bat2.bat & timeout /t 25200 & taskkill /im X.exe /f
bat2.bat:
cd blah
bat1.bat
Le problème avec cette approche est que seulement après 25200 secondes (ou 7 heures) de la minuterie est arrêté, et ne sera pas résilié avant cette limite. Comment puis-je dire à l'ordinateur que si le programme X.exe
est maintenant terminé, n'attendez plus?
Toute aide est appréciée!
Si vous le définissez x.exe pour l'exécuter en tant que tâche planifiée, vous pouvez lui indiquer d'arrêter la tâche après 8 heures.Malheureusement, vos seules options dans le planificateur de tâches sont 1, 2, 4, 8 ou 12 heures. Ce que vous pouvez faire est d'utiliser la commande 'TASKLIST' pour vérifier si le programme fonctionne toutes les 300 secondes. Si ce n'est pas le cas, le fichier bat peut quitter. Si elle est toujours en cours d'exécution, vérifiez combien de secondes elle a fonctionné jusqu'à présent et tuez-la si elle est de 25 200 secondes. – Squashman
@Squashman merci pour l'idée et la commande. J'ai un simple script 'tasklist/fi" nom de l'image eq X.exe "', mais comment retournez-vous la durée d'exécution de 'X.exe'? Pouvez-vous fournir une réponse formelle afin que je puisse l'accepter aussi? Merci!!! – kensaii
Définissez trois variables. % checktime%% elapsedtime% et% killtime%. Utilisez la variable% checktime% avec la commande 'TIMEOUT'. Utilisez ensuite la commande 'TASKLIST' pour voir si le processus est en cours d'exécution. S'il est en cours d'exécution, ajoutez% checktime% à% elapsedtime%. Vérifiez ensuite si% elapsedtime% est supérieur ou égal à% killtime%. Si la condition kill time n'a pas été remplie, utilisez la commande 'GOTO' pour revenir à une étiquette avant la commande' TIMEOUT'. Si la condition kill time a été remplie, utilisez la commande 'TASKKILL' pour arrêter le processus. – Squashman