10

バッチ ファイルを使用して、Windows 7 マシンで実行されている「standard.exe」という名前のプロセスの数と、「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

前もって感謝します!

4

3 に答える 3

11

例を使用すると、find の /N を /C に置き換えるだけで、プロセスの数が返されます。

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

次に、それを次のように減らすことができます。

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

Andriy M が指摘しているように、myapp.exe と notmyapp.exe の両方に一致します。

質問の 2 番目の部分については、次のようにします。

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 
) 
于 2011-07-01T18:52:12.250 に答える
6

ファイルを書きたくない場合は、コマンドtasklistとsetvar1コマンドを次のように置き換えます。

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

2番目のものも同じです。

for /f "tokens=1,*" %%a in ('tasklist ^| find /I /C "basic.exe"') do set var2=%%a
于 2012-08-13T18:31:21.713 に答える
2

おそらくもっときちんとした方法がありますが、次のコードはそのトリックを行うようです:

: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

乾杯!

于 2011-07-04T12:29:46.617 に答える