【问题标题】:How to redirect input to program and kill the application if it takes too long如果花费太长时间,如何将输入重定向到程序并终止应用程序
【发布时间】:2017-01-27 20:37:08
【问题描述】:

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

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

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

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

但它最终会在我的控制台上打开大量选项卡,而不是重定向输入和输出。

如果应用程序没有自行结束,同时还重定向输入和输出而无需打开额外的控制台选项卡,我该如何实现杀死应用程序?

【问题讨论】:

    标签: batch-file redirect stdout stdin kill


    【解决方案1】:

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

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

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

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

    另一种选择是做相反的事情:在单独的实例中执行进程终止代码,并留给当前的cmd 实例处理重定向

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 2015-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      • 2017-03-03
      相关资源
      最近更新 更多