Бывают задачи, когда в командном 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 )
Другая задача – дождаться запуска программы, чтобы выполнить какие-то действия:
@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
Здесь используется скрипт sleep.js, делающий задержку на 1 секунду (1000 мс), см. Как сделать задержку в командном файле.
Аналогично, дождаться завершения программы, чтобы выполнить какие-то действия:
@echo off set imagename=outlook.exe :CheckProgram tasklist /fi "IMAGENAME eq %imagename%" | find /i "%imagename%" if not errorlevel 1 cscript.exe sleep.js 1000 && goto CheckProgram rem Выполняем действия, требуемые при закрытом Outlook
Спасибо, теперь программы повторно не запускаются за зря.