Inside a batch file, how can I tell whether a process is running?

batch-file, process, windows

Solution

You can use "for /f" construct to analyze program output.

set running=0
for /f "usebackq" %%T in (`tasklist /nh /fi "imagename eq firefox.exe"`) do set running=1

Also, it's a good idea to stick a

setlocal EnableExtensions

at the begginning of your script, just in case if the user has it disabled by default.

Problem

I'd like to write a batch file that checks to see if a process is running, and takes one action if it is, and another action if it isn't. I know I can use tasklist to list all running processes, but is there a simpler way to directly check on a specific process? It seems like this should work, but it doesn't: ``` tasklist /fi "imagename eq firefox.exe" /hn | MyTask IF %MyTask%=="" GOTO DO_NOTHING 'do something here :DO_NOTHING ``` Using the solution provided by atzz, here is a complete working demo: Edit: Simplified, and modified to work under both WinXP and Vista ``` echo off set process_1="firefox.exe" set process_2="iexplore.exe" set ignore_result=INFO: for /f "usebackq" %%A in (`tasklist /nh /fi "imagename eq %process_1%"`) do if not %%A==%ignore_result% Exit for /f "usebackq" %%B in (`tasklist /nh /fi "imagename eq %process_2%"`) do if not %%B==%ignore_result% Exit start "C:\Program Files\Internet Explorer\iexplore.exe" www.google.com ```

Original source