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