运行DOS命令的时间限制

时间:2012-07-01 10:29:56

标签: batch-file

我想执行以下操作。

  1. 从包含许多单词的输入文件中一次读取1个单词。
  2. 将此单词作为参数传递给另一个基于命令行的应用程序。
  3. 运行该应用程序一段固定的时间,比如10秒。
  4. 如果应用程序在10秒后仍在运行,则中止应用程序的执行并返回,从输入文件中选择下一个单词并重复步骤1到3.
  5. 这是我写的,虽然它没有达到我想要的目的:

    @echo off
    for /f %%i in ('type input.txt') do call:Routine %%i
    
    :Routine
    set app="myApp.exe"
    set limit=60
    
    %app% %1
    goto Delay
    
    :Delay
    ping localhost -n %limit% > nul
    

    上述脚本将在myApp执行完成后引入延迟。但是,我希望它运行myApp.exe不超过10秒,如果是,则使用taskkill中止应用程序并转到输入文件中的下一个单词。

    我在网上搜索了一个解决方案并遇到了这个问题:

    http://www.tech-archive.net/Archive/WinXP/microsoft.public.windowsxp.general/2006-04/msg03609.html

    虽然它没有完全回答我的查询,但我想让我的代码做类似的事情。

    感谢。

1 个答案:

答案 0 :(得分:3)

链接代码中的逻辑看起来有缺陷:它要么启动3个下载命令,要么延迟~59秒并尝试终止所有下载命令,但它永远不会同时执行这两个命令。 TASKKILL命令参数不正确 - imagename属于/ IM参数。

在你的代码中,如果没有TASKKILL命令,你就不会杀死你的任务!

循环结束后必须GOTO:EOF或EXIT / B,否则代码将通过并执行子程序而不使用CALL。但根本没有必要使用子程序。

您只需要初始化一次变量。

无需在IN()子句中执行命令。 FOR / F有一个可以直接读取文本文件的变体。从命令行键入HELP FOR并仔细阅读文档。

PING在每个回应请求之间有大约1秒的延迟。因此,11的计数将产生大约10秒的延迟。

编辑 - 最初忘记了在自己的流程中启动应用程序的关键START命令

@echo off
set app="myApp.exe"
set limit=11
for /f %%i in (input.txt) do (
  start "" %app% %%i
  ping localhost -n %limit% > nul
  taskkill /im %app% /f
)