2011-01-04 7 views
0

私のサーバー2003システムで、 "tasklist"とgrep for windowsを使用してphp-cgi.exeプロセスの数を数えようとしています。私は一時ファイルに書き込むことを避けたいと思います。バッチを使用したプロセスインスタンスのカウント

call set _proc_cnt = tasklist /fi "Imagename eq php-cgi.exe" /nh /fo CSV| grep -c -e "php-cgi" 
echo %_proc_cnt% 
pause 

相続人は、私が実行したときに、私は何を得ること

C:\Users\gm\Desktop>call set _proc_cnt = tasklist /fi "Imagename eq php-cgi.exe" /nh /fo CSV | grep -c -e "php-cgi" 
0 

C:\Users\gm\Desktop>echo 
ECHO is on. 

C:\Users\gm\Desktop>pause 
Press any key to continue . . . 

は、誰もが、なぜそのdoesntの仕事上の任意のヒントを持っていますか?

答えて

0

あなたの要件が厳密にこれがバッチファイルで行われているかどうかはわかりませんが、これはVBSスクリプトとWMIを使用するとかなり簡単です。

vbsという拡張子を持つ新しいファイルを作成し、以下にファイルに追加します。このスクリプトは、cmd.exeのインスタンス数のダイアログを表示します。

Option Explicit 
Dim objWMIService, processItems, processName 

processName = "cmd.exe" 
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") 

Set processItems = objWMIService.ExecQuery("Select * from Win32_Process where Name='" & processName & "'") 

Wscript.Echo processName & ": " & processItems.Count 
+0

ありがとうlinuxuser27、優れたソリューションのthats。私はちょっと微調整して、パラメータを渡して、それを数えられるプロセスにすることができました。 – Matt

0

私がやったことをHeres。私はスクリプトlinuxuser27を使用して、素晴らしいFORループを使用して、変数に格納されたプロセスインスタンス数を取得しました。

FOR /F "tokens=*" %%i IN ('%~dp0count_proc.vbs php-cgi.exe') DO SET _PROC_COUNT=%%i 
ECHO %_PROC_COUNT% 
PAUSE 



そして、ここで私がどんなプロセス名を渡すことができるように、私はほんの少しの微調整パラメータは(もProcessNameのビットを取り出して、私が数えてみたかったことを掲載linuxuser27 VBScriptのです)。バッチファイルのソースでわかるように、私は単にこのproc_count.vbsを呼び出しました。

Option Explicit 
Dim objWMIService, processItems, processName 

processName = Wscript.Arguments(0) 
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") 

Set processItems = objWMIService.ExecQuery("Select * from Win32_Process where Name='" & processName & "'") 

Wscript.Echo processItems.Count 
関連する問題