Продолжайте запускать пакетный цикл после запуска .exe - PullRequest
0 голосов
/ 23 апреля 2019

Мой program.exe иногда останавливается.Я сделал пакетный скрипт, который проверяет, работает ли программа, и запускает ее, если не в цикле.

Проблема в том, что цикл завершается после запуска и запуска program.exe.

Мне нужно сохранитьзапуск цикла для проверки каждые 5 минут, если программа все еще работает или ее нужно запустить снова.

set loopcount=10000
:loop

tasklist /FI "IMAGENAME eq program.exe" /FO CSV > search.log

FINDSTR program.exe search.log > found.log

FOR /F %%A IN (found.log) DO IF %%~zA EQU 0 GOTO end

echo Starting..
start /b C:\_Program\program.exe

:end

del search.log
del found.log

echo Waiting..
timeout /t 300 /nobreak


if %loopcount%==0 goto exitloop
goto loop
:exitloop
pause

Ответы [ 3 ]

1 голос
/ 23 апреля 2019

Это может быть просто:

@echo off
:repeat
tasklist | findstr /i "program.exe">nul
if not %errorlevel% equ 0 start /b "C:\_Program\program.exe"
timeout /t 10 /nobreak>nul && goto :repeat

Это делает список задач, и мы используем findstr, чтобы определить errorlevel, если не 0 запустить программу, timeout в течение 10 секунд и повторить,внешние файлы не нужны.

1 голос
/ 23 апреля 2019

Пакетный файл

Если вам нужно использовать пакетный файл, я бы посоветовал:

  1. Удаление цикла
  2. Запуск его каждые 5 минут с использованиемзапланированное задание

Запланированное задание является более надежным, чем бесконечный цикл в случае сбоя процесса.

Запустите это один раз, чтобы запланировать задание, которое повторяется каждые 5 минут:

schtasks /CREATE /SC DAILY /MO 1 /TN 'Name To Give the Scheduled Task' /TR 'C:\path\to\your\script.bat' /ST 0:00 /RI 5 /DU 24:00

PowerShell

Если вы можете использовать PowerShell, эквивалент будет немного проще:

if ($null -eq (ps program -ErrorAction SilentlyContinue)) {
    saps C:\_Program\program.exe
}

Запустите это один раз, чтобы запланировать задачу, которая повторяется каждые 5 минут:

schtasks /CREATE /SC DAILY /MO 1 /TN 'Name To Give the Scheduled Task' /TR 'powershell -EB C:\path\to\your\script.ps1' /ST 0:00 /RI 5 /DU 24:00
0 голосов
/ 23 апреля 2019

Вот пример для тестирования. Для достижения непрерывной проверки (в цикле) существования процесса «WinRAR.exe» (как пример приложения для проверки); поэтому вы можете изменить путь и имя процесса для проверки.

@echo off
Set "MyApplication=%Programfiles%\WinRAR\WinRAR.exe"
Set "MyProcess=WinRAR.exe"
Color 9B
Title Check Running process "%MyProcess%"
mode con cols=75 lines=2
:Loop
cls
tasklist /nh /fi "imagename eq %MyProcess%" 2>nul |find /i "%MyProcess%" >nul
If not errorlevel 1 (Echo "%MyProcess%" is running) else (start "" "%MyApplication%")
ping -n 60 127.0.0.1 >nul 
goto Loop
...