Как написать bat для перезапуск приложения?
Подскажите скрипт для bat файла, на перезапуск приложения
Должен проверить приложение sync.exe, если работает, то завершает его и запускает по новой, если не работает (процесс вовсе отсутствует), то просто запускает.
Ответы (2 шт):
Как-то так:
taskkill /im sync.exe & timeout 1 & start "" "sync.exe"
Но может потребоваться флаг принудительного завершения:
taskkill /f /im sync.exe & timeout 1 & start "" "sync.exe"
PS: На запущенность не проверяю потому что одинарный амперсанд игнорирует ошибку.
PPS: timeout 2 можно заменить на ping -n 2 127.0.0.1 (с единицей не работает).
Приведу пример на основе калькулятора (WIN10) управление потоком исполнения происходит спомощью конструкции if-else а так же комманды goto с указанием метки для перехода (что-то типа аналога функций) каждая комманда которая предваряется @ не будет выводиться на экран
В данном случае название процесса и программы для запуска немного отличаются, поэтому пришлось захардкодить calc.exe в start_app.
А в первой строке set app=Calculator.exe я задал имя процесса.
Если в %ERRORLEVEL% будет не 0 то значит произошла ошибка и процесс не был найден среди запущенных.
set app=Calculator.exe
@tasklist /fi "ImageName eq %app%" /fo csv 2>NUL | find /I "%app%">NUL
@if "%ERRORLEVEL%"=="0" (goto restart_app) else (goto start_app)
:restart_app
@taskkill /f /im "%app%"
@timeout /t 1 /nobreak
@goto start_app
:start_app
@start "" "calc.exe"
@goto exit
:exit
Еще можно сделать универсальный скрипт, при условии что имена процесса и программы будут совпадать:
@tasklist /fi "ImageName eq %1" /fo csv 2>NUL | find /I "%1">NUL
@if "%ERRORLEVEL%"=="0" (goto restart_app) else (goto start_app)
:restart_app
@taskkill /f /im "%1"
@timeout /t 1 /nobreak
@goto start_app
:start_app
@start "" "%1"
@goto exit
:exit
Использовать его очень просто, можно дать подходящее имя скрипту (restarter.bat) и поместить в папку System32 или любой путь где система найдет. При запуске вторым параметром указываем программу например: restarter notepad.exe