2011-07-01 6 views
5

kullanarak, şu anda çalışan aynı ada sahip süreçlerin miktarı nasıl sayılır? Windows 7 makinemde çalışan "standard.exe" adlı işlemlerin sayısını karşılaştırmak için bir toplu iş dosyası kullanmak istiyorum "basic.exe" adlı işlemlerin sayısı. "Standard.exe" adı verilen işlemlerin miktarı "basic.exe" adı verilen işlemlerin miktarına eşitse, sayıların eşit olmaması durumunda, basic.exe yeniden başlatılmalıdır.Bir batchfile

Herhangi bir fikrin var mı? Bir işlemin çalışıp çalışmadığını kontrol etmek için aşağıdaki kodu zaten buldum, ancak şimdi aynı adı taşıyan işlemlerin sayısını saymak istiyorum.

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

Şimdiden teşekkürler!

+0

Daha az "standard.exe" işlemlerinin ardından "basic.exe" olanların olması mümkün mü? Eğer öyleyse, bu durumda ne yapılmalı? –

+0

standard.exe yalnızca basic.exe'den daha az veya eşit olabilir (çalışan basic.exe, standart.exe adlı bir işlem oluşturur). Bu nedenle, gerçekten "basic.exe" olanlardan daha az "standard.exe" işlemlerinin olması çok mümkündür, bu durumda tüm basic.exe işlemlerinin kapatılması ve yeniden başlatılması gerekir. –

cevap

4

Örneğini kullanarak, süreçlerin sayısını döndürmek için/N ile bulunan/N değerini değiştirin.

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

Sonra sadece onu aşağı düşürebilir:

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

Andriy M işaret gibi uygulam.exe ve notmyapp.exe hem maç olacak olsa

.

Sorunuzun ikinci kısmına gelince, sadece bunu:

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 
) 
+0

Genel olarak, sanırım, ikinci kod parçası ilkine eşit değil, çünkü "notmyapp.exe" ile birlikte "myapp.exe" sayılırdı. –

+0

Teşekkürler Maynza, gerçekten işe yarıyor gibi görünüyor. Ancak, hala iki işlem arasındaki karşılaştırmayı nasıl yapacağımdan emin değilim? Herhangi bir ipucu? Teşekkürler –

+0

Değerlerden birini veya her ikisini bir ortam değişkeninde saklayabilir ve sonra bunları karşılaştırabilirsiniz. ie: set a = görev listesi/FI "IMAGENAME eq myapp.exe" 2> NUL | find/I/C "myapp.exe" set b = görev listesi/FI "IMAGENAME eq myapp2.exe" 2> NUL | a == b do (stuff) – Maynza

2

Bunu yapmanın daha düzgün bir yol daha var ama şu kod hileye neden olabilir:

: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 

Şerefe! Bir dosyayı yazmak için istemiyorsanız

5

, ikinci olanlar için aynı

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

ile tasklist ve set var1 komutları değiştirin.

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

toplu iş dosyalarında uzman değilim,/I/C "myapp2.exe" bul. @Maynza'nın Çözümü, çıktı için bir değişken oluşturmaya çalıştığım sürece çalışır. bu nedenle satır doğrudan doğruya cmd'ye yapıştırılan doğru dönüş değerini verir ... ama seri sette x = ... 0 verir ... Ancak, Win10 x64 kullanarak, bu çözüm benim için çalıştı! – dba