仅在程序运行时间超过特定持续时间时才使批处理文件关闭

时间:2018-05-24 12:22:42

标签: batch-file cmd imacros

我制作了一个批处理文件,它在关闭时重启脚本。脚本运行2分钟或15分钟。如果脚本在2分钟后没有关闭,这意味着它已成功运行并且不再需要批处理文件,我想让批处理文件自行关闭。换句话说:

  1. 批处理文件运行脚本
  2. 批处理文件等待脚本在2分钟之前关闭
  3. 60秒后重新启动脚本
  4. 如果脚本运行时间超过2分钟,则退出批处理文件和脚本 永远不会重新开始。
  5. 我的问题是:如果脚本运行超过2分钟,如何编辑代码以使批处理文件关闭?

    注意:我在这里谈论iMacros脚本。如果失败/完成它们会自动关闭,因此无需终止进程。文件扩展名:.iim

    这是我目前的代码:

     @echo off
    :start
    set /a var+=1
    if %var% EQU 10000 goto end
    :: 
    TIMEOUT /T 60
    cd C:\filepath
    program.iim
    goto start
    
    :end
    echo var has reached %var%.
    pause
    exit
    

2 个答案:

答案 0 :(得分:0)

我不打算完成你脚本的其余部分,因此只显示你要求的内容,即如果我正确理解了这个问题。您基本上想要检查program.iim是否仍在运行,您想要退出批处理脚本。如果是这样,那么这可能会有所帮助:

title myscript
timeout /t 120 >nul
tasklist /FI "IMAGENAME eq program.iim" |findstr program.iim
if "%errorlevel%"=="0" taskkill /fi "WINDOWTITLE eq myscript"

所以会发生什么,我们将批处理文件的标题设置为myscript然后执行2分钟的超时检查任务program.iim是否正在运行(即如果这实际上创建了一个图像这个名称)并且如果图像仍在运行时使用findstr,我们只需通过它的titlename来终止批处理文件。

然后你可以添加另一行:

if "%errorlevel%"=="1" goto :start

如果您在检查时未运行,则可以重新启动program.iim。请注意,title myscript应该最好位于脚本的顶部。

答案 1 :(得分:0)

这没有经过测试,但看起来它可能会做你想要的。我没有iMacros。如果它不起作用,我道歉。

iMacros.exe程序在while循环开始之前运行一次,因为我的猜测是你不想在第一次启动时等待60秒。将此代码放在名为timesp.ps1的文件中(或以.ps1结尾的其他名称)。

$starttime = Get-Date
Start-Process -FilePath iMacros.exe -ArgumentList "program.iim" -Wait

while ((New-TimeSpan -Start $starttime).TotalMinutes < 2) {
    Start-Sleep -Seconds 60
    $starttime = Get-Date
    Start-Process -FilePath iMacros.exe -ArgumentList "program.iim" -Wait
}

使用以下命令运行此脚本:

powershell -NoProfile -File timesp.ps1