启动.exe后继续运行批处理循环

时间:2019-04-23 09:56:55

标签: loops batch-file exe

我的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 个答案:

答案 0 :(得分:1)

批处理文件

如果您必须使用批处理文件,建议您:

  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

答案 1 :(得分:1)

它可能很简单:

@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秒钟,然后重复一次,不需要外部文件。

答案 2 :(得分:0)

这是一个测试示例。 为了实现连续检查(循环)过程“ 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