Как подсчитать количество процессов с одинаковым именем, запущенных в данный момент, используя пакетный файл - PullRequest
8 голосов
/ 01 июля 2011

Я хотел бы использовать командный файл для сравнения числа процессов с именем "standard.exe", которые выполняются на моем компьютере с Windows 7, с количеством процессов с именем "basic.exe". Если количество процессов, называемых «standard.exe», равно количеству процессов, называемых «basic.exe», ничего не должно произойти, если числа не совпадают, basic.exe следует перезапустить.

Есть идеи? Уже найден следующий код, чтобы проверить, запущен ли процесс, но теперь я бы хотел посчитать количество процессов, имеющих одно и то же имя.

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

Заранее спасибо!

Ответы [ 3 ]

7 голосов
/ 01 июля 2011

Используя ваш пример, просто замените / N в find на / C, чтобы получить счетчик процессов.

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

Тогда вы можете просто уменьшить его до:

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

Хотя, как отмечает Андрей М, он будет совпадать с myapp.exe и notmyapp.exe.

Что касается второй части вашего вопроса, просто сделайте это:

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 
) 
6 голосов
/ 13 августа 2012

Если вы не хотите записывать файл, замените команды tasklist и установите var1 на

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

то же самое для вторых.

for /f "tokens=1,*" %%a in ('tasklist ^| find /I /C "basic.exe"') do set var2=%%a
2 голосов
/ 04 июля 2011

Вероятно, есть более удобный способ сделать это, но следующий код, похоже, поможет:

: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

Ура! * * 1004

...