如果需要太长时间,如何将输入重定向到程序并终止应用程序

时间:2016-09-20 03:33:57

标签: batch-file redirect stdout stdin kill

我有以下代码来调用具有输入和输出重定向的应用程序

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

当目标应用程序由于某种原因没有结束并且批处理脚本等待时,问题就出现了。我需要重定向输入和输出,同时还为应用程序添加超时。我试过了:

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

但最终会在我的控制台上打开大量标签而不是重定向输入和输出。

如果应用程序花费的时间超过2秒,如果它没有结束,同时还重定向输入和输出而没有额外的控制台标签打开,我该如何实现?

1 个答案:

答案 0 :(得分:0)

您的问题是您的命令正在重定向stdin命令的stdoutstart流,而不是重定向程序流。

不知道变量的确切内容使得无法确定正确引用命令的位置,但您可以尝试使用类似

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

即,启动一个新的cmd实例,该实例将在处理重定向时运行该命令

另一种选择是只执行oposite:在单独的实例中执行杀死代码的进程并留给当前cmd实例处理重定向

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