Вот мое предложение:
@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методологию, поскольку она будет поддерживать несколько строк кода.