2016-09-20 1 views
1

j'ai le code suivant pour appeler une application avec entrée et redirection sortieComment rediriger l'entrée à programmer et à tuer l'application si elle prend trop de temps

%prgm1% < %testDir%\!filename! > %prgm1OutputDir%\!filename! 

Le problème vient lorsque l'application cible pour une raison ne se termine pas et le script batch attend toujours. J'ai besoin de rediriger l'entrée et la sortie tout en ajoutant un délai à l'application. J'ai essayé:

start %prgm1% < %testDir%\!filename! > %prgm1OutputDir%\!filename! 
timeout /t 2 
taskkill /im %prgm1% /f 

mais il finit par ouvrir une grande quantité d'onglets sur ma console et pas rediriger les entrées et les sorties.

Comment puis-je mettre en œuvre la suppression de l'application si elle prend plus de temps que 2 secondes si elle ne se termine pas tout en redirigeant l'entrée et la sortie sans l'ouverture d'autres onglets de consoles?

Répondre

0

Votre problème est que votre commande redirige les flux stdin et stdout de la commande start, au lieu de rediriger les flux de votre programme.

Ne connaissant pas le contenu exact des variables rendent impossible de déterminer où de citer correctement les commandes, mais vous pouvez essayer quelque chose comme

start /b "" cmd /c "%prgm1% < %testDir%\!filename! > %prgm1OutputDir%\!filename! " 
timeout /t 2 
taskkill /im %prgm1% /f 

qui est, commencer une nouvelle instance cmd qui exécutera la commande lors de la manipulation de la redirection

une autre option est de faire juste le oposite: exécuter dans une instance distincte le code de mise à mort du processus et laisser à l'instance en cours cmd gérer la redirection

start /b "" cmd /c ">nul timeout /t 2 & taskkill /im %prgm1% /f" 
%prgm1% < %testDir%\!filename! > %prgm1OutputDir%\!filename!