Вот мое предложение:
@echo off
tasklist /FI "IMAGENAME eq program.exe" | findstr "program.exe" >nul
if %ERRORLEVEL% == 1 goto mycode
goto eof
:mycode
rem put your code here
:eof
exit
Как и @ techie007 предложил, я бы порекомендовал список tasklist /FI "IMAGENAME eq program.exe"
как он выводит только точные совпадения, поэтому при поиске cmd.exe
вы не htcmd.exe
не знаете, почему он обнуляет его, хотя он и есть. конвейер.
Я не уверен, почему он предлагает find /I /N
я лично предпочитаю findstr
поскольку он гораздо более универсален, но по его предложению он выполняет свою работу.
В последней части мое предложение будет отличаться от @ techie007, if %ERRORLEVEL% == 1 goto mycode
goto eof
Это будет работать как оператор if else, поэтому, если программа не запущена, перейдите к mycode
(где вы будете заполнять хорошо .. ваш код) иначе перейдите к eof
который выйдет из пакета.
Моя единственная ошибка с @ techie007 - if "%ERRORLEVEL%"=="0" echo Program is running.
поскольку независимо от того, является ли это истиной или ложью, он будет запускать следующую строку кода. Вот почему я хотел рекомендовать использовать методологию goto
поскольку она будет поддерживать несколько строк кода.