응용 프로그램이 배치 (well cmd) 파일에서 실행 중인지 어떻게 확인할 수 있습니까?
프로그램이 이미 실행중인 경우 다른 인스턴스를 시작할 필요가 없습니다. (단일 인스턴스로만 앱을 변경할 수 없습니다.)
또한 응용 프로그램은 모든 사용자로 실행될 수 있습니다.
답변
grep 을 사용하여 영감을 얻은 또 다른 가능성은 다음과 같습니다.
tasklist /FI "IMAGENAME eq myapp.exe" 2>NUL | find /I /N "myapp.exe">NUL
if "%ERRORLEVEL%"=="0" echo Program is running
추가 파일을 저장할 필요가 없으므로이 방법을 선호합니다.
답변
내가 그것을 해결 한 방법은 다음과 같습니다.
tasklist /FI "IMAGENAME eq notepad.exe" /FO CSV > search.log
FOR /F %%A IN (search.log) DO IF %%~zA EQU 0 GOTO end
start notepad.exe
:end
del search.log
메모장 이 아직 실행 중이 아닌 경우 메모장 이 열립니다 .
편집 : 이것은 작업 목록에서 숨겨진 응용 프로그램을 찾지 않습니다. 여기에는 다른 사용자로 실행되는 예약 된 작업이 자동으로 숨겨지기 때문에 포함됩니다.
답변
나는 Chaosmaster의 솔루션을 좋아합니다! 그러나 다른 외부 프로그램 (예 : find.exe 또는 findstr.exe )을 시작하지 않는 솔루션을 찾았습니다 . 그래서 Matt Lacey의 솔루션에서 아이디어를 추가하여 피할 수있는 임시 파일을 만듭니다. 결국 나는 매우 간단한 해결책을 찾을 수 있었으므로 공유했습니다 …
SETLOCAL EnableExtensions
set EXE=myprog.exe
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto FOUND
echo Not running
goto FIN
:FOUND
echo Running
:FIN
이것은 나를 위해 잘 작동합니다 …
답변
TASKLIST 대신 QPROCESS를 사용하는 npocmaka의 제안은 훌륭하지만 그 대답은 너무 크고 복잡하여 상당히 단순화 된 버전을 게시해야한다고 생각합니다.
QPROCESS "myprocess.exe">NUL
IF %ERRORLEVEL% EQU 0 ECHO "Process running"
위의 코드는 Windows 7에서 관리자 기능을 가진 사용자와 함께 테스트되었습니다.
답변
Windows에서는 다음과 같이 WMI (Windows Management Instrumentation)를 사용하여 지정된 명령 줄이있는 앱이 시작되지 않도록 할 수 있습니다.
wmic process where (name="nmake.exe") get commandline | findstr /i /c:"/f load.mak" /c:"/f build.mak" > NUL && (echo THE BUILD HAS BEEN STARTED ALREADY! > %ALREADY_STARTED% & exit /b 1)
답변
TASKLIST | FINDSTR ProgramName || START "" "Path\ProgramName.exe"
답변
Program Files \ PV에 설치된 http://www.teamcti.com/pview/prcview.htm의 PV.exe를 다음 과 같은 배치 파일과 함께 사용합니다.
@echo off
PATH=%PATH%;%PROGRAMFILES%\PV;%PROGRAMFILES%\YourProgram
PV.EXE YourProgram.exe >nul
if ERRORLEVEL 1 goto Process_NotFound
:Process_Found
echo YourProgram is running
goto END
:Process_NotFound
echo YourProgram is not running
YourProgram.exe
goto END
:END