Сделать пакетный файл закрывается только если программа работает дольше определенной продолжительности - PullRequest
0 голосов
/ 24 мая 2018

Я создал командный файл, который перезапускает скрипт в момент его закрытия.Сценарий выполняется в течение 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

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Это не проверено, но похоже, что оно может делать то, что вы ищете.У меня нет 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
0 голосов
/ 25 мая 2018

Я не собираюсь проходить остаток вашего сценария, поэтому покажу только то, что вы просили, то есть, если я правильно понял вопрос.В основном вы хотите проверить, работает ли 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, если изображение все еще работает, мы просто уничтожаем пакетный файл по его названию.

Вы можете добавить следующую строку:

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

Что позволит вам перезапустить program.iim, если он не будет запущен к тому времени, когда вы его проверите.Обратите внимание, что title myscript предпочтительно должен быть вверху вашего скрипта.

...