How to count amount of processes with identical name currently running, using a batchfile

28,306

Solution 1

Using your example simply replace the /N in find with /C to return the count of processes.

tasklist /FI "IMAGENAME eq myapp.exe" 2>NUL | find /I /C "myapp.exe"

Then you can just reduce it down to :

tasklist | find /I /C "myapp.exe"

Although as Andriy M points out it will match both myapp.exe and notmyapp.exe.

As for the second part of your question, simply do this:

set a=tasklist /FI "IMAGENAME eq myapp.exe" 2>NUL | find /I /C "myapp.exe" 
set b=tasklist /FI "IMAGENAME eq myapp2.exe" 2>NUL | find /I /C "myapp2.exe" 
if not a==b do ( 
    stuff 
) 

Solution 2

If you don't want to write a file, replace the tasklist and set var1 commands with

for /f "tokens=1,*" %%a in ('tasklist ^| find /I /C "standard.exe"') do set var1=%%a

same for the second ones.

for /f "tokens=1,*" %%a in ('tasklist ^| find /I /C "basic.exe"') do set var2=%%a

Solution 3

There is probably a neater way to do it, but the following code seems to do the trick:

:begin
tasklist | find /I /C "standard.exe">D:\tmpfile1.txt
tasklist | find /I /C "basic.exe">D:\tmpfile2.txt
set /p var1= <D:\tmpfile1.txt
set /p var2= <D:\tmpfile2.txt
if %var1% LSS %var2% goto restart
if %var1% EQU %var2% goto wait

:wait
echo waiting..
ping -n 300 127.0.0.1 > nul
goto begin

:restart
echo error has occured, all processes will be restarted
taskkill /f /im standard.exe
taskkill /f /im basic.exe
ping -n 30 127.0.0.1 > nul

goto begin

Cheers!

Share:
28,306
Admin
Author by

Admin

Updated on August 08, 2022

Comments

  • Admin
    Admin almost 2 years

    I would like to use a batch file to compare the number of processes named "standard.exe", that are running on my Windows 7 machine, with the number of processes named "basic.exe". If the amount of processes called "standard.exe" equals the amount of processes called "basic.exe" nothing should happen, if the numbers are unequal, basic.exe should be restarted.

    Any ideas? Already found the following code to check whether a process is running, but now I would like to count the number of processes carrying the same name.

    tasklist /FI "IMAGENAME eq myapp.exe" 2>NUL | find /I /N "myapp.exe">NUL
    if "%ERRORLEVEL%"=="0" echo Programm is running
    

    Thanks in advance!

  • Andriy M
    Andriy M almost 13 years
    Generally, I think, the second piece of code is not equal to the first one, because it would count "myapp.exe" together with "notmyapp.exe".
  • Admin
    Admin almost 13 years
    Thanks Maynza, it seems to work indeed. However, I'm still not sure how to do the comparison between both number of processes? Any hints? Thanks
  • Maynza
    Maynza almost 13 years
    Well you could store one or both of the values in a environment variable and then compare them. ie: set a=tasklist /FI "IMAGENAME eq myapp.exe" 2>NUL | find /I /C "myapp.exe" set b=tasklist /FI "IMAGENAME eq myapp2.exe" 2>NUL | find /I /C "myapp2.exe" if a==b do ( stuff )
  • dba
    dba about 7 years
    I'm not an expert on batch files. @Maynza 's Solution works as long as I try to set a variable for the output. so the line gives correct return value pasted directly to the cmd... but in batch set x=... gives 0... However, using Win10 x64, this solution worked for me!