我试图使用“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 . . .
有没有人知道为什么不起作用?
答案 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