Проверить, запущена ли программа
Windows
Бывают задачи, когда в командном CMD/BAT файле необходимо проверить, запущено ли какое-то определённое приложение.
Например, командный файл резервного копирования должен дождаться завершения программы, открывшей файлы. Или командный файл должен проверять работу программы и, если она не запущена, запускать её.
Для решения этих задач надо лишь воспользоваться командой tasklist с фильтром по названию приложения.
Проверить, запущено ли приложение Microsoft Outlook (outlook.exe):
@echo off
set imagename=outlook.exe
tasklist /fi "IMAGENAME eq %imagename%" | find /i "%imagename%"
if errorlevel 1 (
echo %imagename% не запущен
rem Выполняем действия, требуемые при закрытом Outlook
) else (
echo %imagename% запущен
rem Выполняем действия, требуемые при открытом Outlook
)
Здесь используется скрипт sleep.js, делающий задержку на 1 секунду (1000 мс), см. Как сделать задержку в командном файле.
Аналогично, дождаться завершения программы, чтобы выполнить какие-то действия:
@echo off
set imagename=outlook.exe
:CheckProgram
tasklist /fi "IMAGENAME eq %imagename%" | find /i "%imagename%"
if errorlevel 1 cscript.exe sleep.js 1000 && goto CheckProgram
rem Выполняем действия, требуемые при открытом Outlook
В первом примере мы хотим чтобы при закрытом Outlook он запускался, то по идее дописываем
start outlook. А если к примеру нам нужен не оутлук то команда старт будет выглядеть
start "C\путь до файла\файл.exe"Так команда не сработает, поскольку если посмотреть справку по ней (
start /?), то в справке вы увидите следующее:
START ["заголовок"] [/D путь] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/NODE <узел NUMA>] [/AFFINITY <маска сходства>] [/WAIT] [/B]
[команда/программа] [параметры]
Можно пробовать разные варианты с ковычками и без указывать по разному пути но самый надежный и безотказно работающий это
cd\ C\путь до файла\
start файл.exe
Готовый вариант батника который проверит запущена ли программа и если она запущена просто прекратит свою работу если программа не запущена, запустит ее
@echo off
set imagename=файл.exe
tasklist /fi "IMAGENAME eq %imagename%" | find /i "%imagename%"
if errorlevel 1 (
echo %imagename% не запущен
rem
cd C:\путь до файла\
start файл.exe
) else (
echo %imagename% запущен
rem exit
)
Далее добавляем в диспетчер задач виндовс на запуск нашего файла по расписанию и все.