1

我想执行以下操作。

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

这是我写的,尽管它并没有完全达到我想要的效果:

@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

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

谢谢。

4

1 回答 1

3

链接代码中的逻辑看起来有缺陷:它要么启动 3 个下载命令,要么延迟约 59 秒并尝试终止所有下载命令,但它从来没有同时执行这两个命令。TASKKILL 命令参数不正确 - 图像名属于 /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
)
于 2012-07-01T12:13:33.577 回答