我有以下代码来调用具有输入和输出重定向的应用程序
%prgm1% < %testDir%\!filename! > %prgm1OutputDir%\!filename!
当目标应用程序由于某种原因没有结束并且批处理脚本等待时,问题就出现了。我需要重定向输入和输出,同时还为应用程序添加超时。我试过了:
start %prgm1% < %testDir%\!filename! > %prgm1OutputDir%\!filename!
timeout /t 2
taskkill /im %prgm1% /f
但最终会在我的控制台上打开大量标签而不是重定向输入和输出。
如果应用程序花费的时间超过2秒,如果它没有结束,同时还重定向输入和输出而没有额外的控制台标签打开,我该如何实现?
答案 0 :(得分:0)
您的问题是您的命令正在重定向stdin
命令的stdout
和start
流,而不是重定向程序流。
不知道变量的确切内容使得无法确定正确引用命令的位置,但您可以尝试使用类似
的内容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!