标题: [系统相关] [已解决]如何用极简BAT代码判断进程数? [打印本页]
作者: pZjVa0 时间: 2013-7-26 00:43 标题: [已解决]如何用极简BAT代码判断进程数?
本帖最后由 pZjVa0 于 2013-7-27 12:27 编辑
给大家出个小题,我找了一下网上判断进程数量的代码不多,本人入门菜鸟懂得不多,想问各位大大如果要判断进程数量,用最少的代码应该如何实现?
例子:
判断QQ数目
当QQ.exe数量大于2时,打开calc.exe计算器
作者: batman 时间: 2013-7-26 01:07
- @echo off
- set /a n=0
- for /f "delims=" %%a in ('tasklist^|findstr /i "qq.exe"') do set /a n+=1
- if %n% gtr 2 calc.exe
复制代码
作者: pZjVa0 时间: 2013-7-26 01:31
回复 2# batman
谢谢batman版主,传说中的n值又开始进行计算了
作者: pZjVa0 时间: 2013-7-26 01:56
回复 2# batman
这个代码是不是少了一个循环?如果单纯这样的话不是只会+1就跑了吗?
作者: pZjVa0 时间: 2013-7-26 01:58
回复 2# batman
忘了...for本身有循环
作者: pZjVa0 时间: 2013-7-26 02:18
回复 2# batman
这个代码没有对进程名完成匹配,如果出现hkcmd.exe也会被计算进去
作者: CrLf 时间: 2013-7-26 02:55
本帖最后由 CrLf 于 2013-7-26 03:01 编辑
回复 2# batman
可以用 find /c 简化成:- @echo off
- for /f "delims=" %%a in ('tasklist /fo csv^|find /i /c ""qq.exe""') do if %%a gtr 2 calc.exe
复制代码
或者这样:- @echo off
- for /f "skip=2" %%a in ('tasklist /nh /fi "imagename eq qq.exe"') do calc.exe&goto next
- :next
复制代码
要极简就类似这样:- @echo off
- tasklist /fi "imagename eq qq.exe"|more +3|findstr .&&calc.exe
复制代码
作者: batman 时间: 2013-7-26 08:13
回复 6# pZjVa0
麻烦兄弟先测试再发表结论。。。
作者: pZjVa0 时间: 2013-7-26 08:35
本帖最后由 pZjVa0 于 2013-7-26 08:54 编辑
回复 7# CrLf
代码1- 找不到文件 - QQ.EXE
- 请按任意键继续. . .
复制代码
应该修改成(去掉一层双引号)- @echo off
- for /f "delims=" %%a in ('tasklist /fo csv^|find /i /c "cmd.exe"') do if %%a gtr 2 calc.exe
- pause
复制代码
但是进程数判断还是不正确,例如我要判断cmd.exe的数量,就算我只打开两个窗口,进程数还是会显示4- @echo off
- for /f "delims=" %%a in ('tasklist /fo csv^|find /i /c "cmd.exe"') do echo %a%
- pause
复制代码
如何可以解决这个问题
::::::::::::::::我是万恶的分割线::::::::::::::::
请您能不能解释一下 代码3
我很感兴趣,但是不明白原理,从第三行开始显示,然后查找"."吗?那如何进行数量判断?
作者: lxzzr 时间: 2013-7-26 11:53
批处理自身会产生进程
作者: pZjVa0 时间: 2013-7-26 11:59
回复 10# lxzzr
如果关闭所有cmd.exe进程情况下,单纯运行一个P,检测到3个,XP下会有两个。
一个cmd.exe算一个P,那其余多出来的是肿么回事呢?
作者: CrLf 时间: 2013-7-26 17:22
回复 11# pZjVa0
有一个 cmd 是 for /f 产生的,刚给人解释过:
http://bbs.bathome.net/redirect. ... 6&fromuid=30406
作者: pZjVa0 时间: 2013-7-26 17:57
回复 12# CrLf
好的。我大概懂判断了
作者: pZjVa0 时间: 2013-7-26 20:40
回复 12# CrLf
虽然问题基本解决..但是无法精确判断导致在不同环境下出现兼容性问题,WIN7下检测到3个,xp下有2个
作者: pZjVa0 时间: 2013-7-27 12:07
兼容性问题大家有办法解决不?
作者: PowerShell 时间: 2013-7-27 22:41
本帖最后由 PowerShell 于 2013-7-29 19:20 编辑
我也想试试:- if ((Get-Process qq).count -gt 2) { calc.exe }
复制代码
powershell处理这个问题不需要用for,就算是用,也不需要新建powershell进程。
当然,如果判断powershell。exe,需要加一个,
至于[WIN7下检测到3个,xp下有2个],powershell应该不会有吧?谁测测?
作者: pZjVa0 时间: 2013-7-27 22:49
回复 16# PowerShell
我在xp和win7下测试过了,- if ((Get-Process qq).count -gt 2) { clac.exe }
复制代码
您贴的这段代码我不太明白
作者: PowerShell 时间: 2013-7-28 13:10
本帖最后由 PowerShell 于 2013-7-29 19:19 编辑
不好意思,昨天头昏昏的,忘说这是powershell代码了。
if ( (Get-Process qq).count -gt 2 )
{
calc.exe
}
Get-Process 是获取系统进程的命令,和tasklist差不多,具体看手册,
Get-Process qq 是显示进程名是qq的,信息。这个信息,是由多个属性组成的。例如你想看qq的pid,就用 (Get-Process qq).id 。当然,前提要有qq这个进程才行。(Get-Process qq).count 自然就是qq的进程数了。
xp和win7 ,用上述命令 测试结果如何呢?
作者: Batcher 时间: 2013-7-28 13:25
回复 18# PowerShell
应该是calc.exe吧
作者: PowerShell 时间: 2013-7-28 21:20
呵呵,写错了,多谢指正。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |