Search code examples
windowsbatch-filecmdtasklist

Find opened process in Windows batch


I'm trying to write code which loops and tells if a certain process is opened or not. It should be a loop that will show me in real time if the process is opened or not. In other words, a text will change when the program is opened and change again when it's closed. Instead what I got was a flood with the same text and it doesn't show the 'echos' below it.

I tried this:

@echo off 
goto xera
:start 
tasklist /FI "IMAGENAME eq notepad.exe" | find /I "notepad.exe" > nul
IF %ERRORLEVEL% equ 0 ECHO is opened
IF %ERRORLEVEL% equ 1 ECHO isnt opened 
:xera
    set /p "=Status: " <nul &call :start //the code got 'stuck' here
    ECHO Text 2 (doesnt show)
    pause>nul

Solution

  • You are not terminating your sub-routine :start correctly. Try the following:

    @echo off 
    goto xera
    :start 
    tasklist /FI "IMAGENAME eq notepad.exe" | find /I "notepad.exe" > nul
    IF %ERRORLEVEL% equ 0 ECHO is opened
    IF %ERRORLEVEL% equ 1 ECHO isnt opened
    exit /b
    :xera
    set /p "=Status: " <nul &call :start
    ECHO Text 2 (doesnt show)
    pause>nul
    

    I inserted exit /b which tells the command interpreter to return to the command after the call statement that actually called it. You could also use goto :EOF instead. Type call /? for more information on how to call sub-routines in batch.