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



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

  1. 批处理文件运行脚本
  2. 批处理文件在 2 分钟前等待脚本关闭
  3. 60 秒后重新启动脚本
  4. 如果脚本运行时间超过 2 分钟,批处理文件将退出,脚本将退出 再也不会重新启动。

我的问题是:如果脚本运行超过 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

我不会浏览您的脚本的其余部分,因此只会显示您的要求,也就是说,如果我正确理解了问题。您基本上想检查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最好位于脚本的顶部。

这没有经过测试,但看起来它可能会做你所寻求的。我没有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

相关内容

最新更新