使用Batch计算流程实例

时间:2011-01-04 20:18:34

标签: batch-file

我试图使用“tasklist”和grep for windows计算我的服务器2003系统上的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 . . .

有没有人知道为什么不起作用?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

这是我最终做的事情。我使用了linuxuser27发布的脚本和一个很好的FOR循环来获取存储在变量中的流程实例计数。

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



这里是发布的vbscript linuxuser27,我调整了一点,以便我可以传入我想要作为参数的任何进程名称(也删除了processName位)。我只是简单地调用了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