Проверка существования и запуск процесса (при необходимости)

Скрипт проверяет запущен ли процесс и, если не запущен, то запускает его. Вставляем скрипт в планировщик и получаем систему, которая автоматически отслеживает и запускает необходимое приложение. У меня так сделано для запуска FTP-сервера, например.

@ECHO OFF
SETLOCAL
REM Файл лога:
SET LOG=%~dp0\ftpserv.log
SET PRG="D:\Programs\TYPSoft FTP Server\ftpserv.exe"
REM Поиск в запущенных процессах нужного процесса, указанного в переменной PRG,
REM и его запуск, если он не запущен
SET filename=ftpserv.exe
REM if "%1" neq "" set filename=%1
for /f %%a in ('tasklist /nh /fi "imagename eq %filename%" ^| find /c "%filename%"') do set /a quantity=%%a
rem Если запущена 1 и более копий процесса
if %quantity% geq 1 goto ALREADY_RUN
DATE /t >> %LOG%
TIME /t >> %LOG%
echo No processes of %filename%! >> %LOG%
rem ... Вставьте сюда свои команды, когда процесс НЕ запущен ...
REM Перед запуском ftpserv приходится прибивать процесс cintanotes.exe (программа заметок)
REM так как иначе при запуске ftpserv cintanotes вылетает с ошибкой.
REM И пока окно с сообщением об ошибке не закроешь, ftpserv не запускается.
REM После запуска ftpserv можно спокойно запускать cintanotes.
taskkill /IM cintanotes.exe
START "" %PRG%
START "" "C:\Program Files (x86)\CintaNotes\cintanotes.exe"
:ALREADY_RUN
DATE /t >> %LOG%
TIME /t >> %LOG%
echo Already run %quantity% processes of %filename% >> %LOG%
rem ... Вставьте сюда свои команды, когда процесс запущен ...
REM 25 числа каждого месяца удаляем файл лога, чтобы не рос бесконечно
SET DAY=%DATE:~0,2%
IF %DAY% == 25 (
   IF EXIST %LOG%.bak DEL %LOG%.bak
   REN %LOG% ftpserv.log.bak
   )
   
:END