2011-07-01 39 views
5

バッチファイルを使用して、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 

ありがとうございます!

+0

"standard.exe"プロセスと "basic.exe"プロセスが少なくなる可能性はありますか?もしそうなら、その場合何をすべきか? –

+0

standard.exeはbasic.exe以下でなければなりません(basic.exeを実行するとstandard.exeというプロセスが1つ作成されます)。したがって、実際には、 "basic.exe"プロセスよりも少ない "standard.exe"プロセスがある可能性が非常に高いです。この場合、すべてのbasic.exeプロセスを終了して再起動する必要があります。 –

答えて

4

例を使用すると、単にfindの/ Nを/ Cで置き換えて、プロセス数を返すことができます。アンドリー・Mが指摘するように、それはのmyapp.exeとnotmyapp.exeの両方に一致しますが

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

tasklist /FI "IMAGENAME eq myapp.exe" 2>NUL | find /I /C "myapp.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 
) 
+0

一般に、私は、 "notmyapp.exe"と一緒に "myapp.exe"を数えるので、2番目のコードは最初のコードと同じではないと思います。 –

+0

Maynzaありがとう、それは確かに動作するようです。しかし、私はまだ両方のプロセスの数を比較する方法がわかりませんか?何かヒント?ありがとう –

+0

環境変数に値のいずれかまたは両方を保存して比較することができます。つまり、次のように設定します。a = tasklist/FI "IMAGENAME eq myapp.exe" 2> NUL | find/I/C "myapp.exe" set b =タスクリスト/ FI "IMAGENAME eq myapp2.exe" 2> NUL | find/I/C "myapp2.exe" a == b do(stuff) – Maynza

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 

乾杯!あなたは、ファイルを書き込みたくない場合

5

は、第二のもののために同じ

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

tasklistとセットvar1コマンドを交換してください。

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

私はバッチファイルの専門家ではありません。 @Maynzaのソリューションは、出力の変数を設定しようとする限り動作します。行は正しい戻り値をcmdに直接貼り付けますが、バッチセットx = ...は0を返します。ただし、Win10 x64を使用すると、この解決策が私に役立ちました! – dba