[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] [已解决]如何用极简BAT代码判断进程数?

本帖最后由 pZjVa0 于 2013-7-27 12:27 编辑

给大家出个小题,我找了一下网上判断进程数量的代码不多,本人入门菜鸟懂得不多,想问各位大大如果要判断进程数量,用最少的代码应该如何实现?

例子:
判断QQ数目
当QQ.exe数量大于2时,打开calc.exe计算器
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

呵呵,写错了,多谢指正。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

回复 18# PowerShell


    应该是calc.exe吧
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 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 ,用上述命令 测试结果如何呢?
1

评分人数

脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

回复 16# PowerShell


    我在xp和win7下测试过了,
  1. if  ((Get-Process qq).count -gt 2) { clac.exe }
复制代码
您贴的这段代码我不太明白

TOP

本帖最后由 PowerShell 于 2013-7-29 19:20 编辑

我也想试试:
  1. if  ((Get-Process qq).count -gt 2) { calc.exe }
复制代码
powershell处理这个问题不需要用for,就算是用,也不需要新建powershell进程。

当然,如果判断powershell。exe,需要加一个,
至于[WIN7下检测到3个,xp下有2个],powershell应该不会有吧?谁测测?
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

兼容性问题大家有办法解决不?

TOP

回复 12# CrLf


    虽然问题基本解决..但是无法精确判断导致在不同环境下出现兼容性问题,WIN7下检测到3个,xp下有2个

TOP

回复 12# CrLf


    好的。我大概懂判断了

TOP

回复 11# pZjVa0


    有一个 cmd 是 for /f 产生的,刚给人解释过:
http://bbs.bathome.net/redirect. ... 6&fromuid=30406

TOP

回复 10# lxzzr


    如果关闭所有cmd.exe进程情况下,单纯运行一个P,检测到3个,XP下会有两个。

一个cmd.exe算一个P,那其余多出来的是肿么回事呢?

TOP

批处理自身会产生进程

TOP

本帖最后由 pZjVa0 于 2013-7-26 08:54 编辑

回复 7# CrLf

代码1
  1. 找不到文件 - QQ.EXE
  2. 请按任意键继续. . .
复制代码
应该修改成(去掉一层双引号)
  1. @echo off
  2.     for /f "delims=" %%a in ('tasklist /fo csv^|find /i /c "cmd.exe"') do if %%a gtr 2 calc.exe
  3. pause
复制代码
但是进程数判断还是不正确,例如我要判断cmd.exe的数量,就算我只打开两个窗口,进程数还是会显示4
  1. @echo off
  2.    for /f "delims=" %%a in ('tasklist /fo csv^|find /i /c "cmd.exe"') do echo %a%
  3. pause
复制代码
如何可以解决这个问题

::::::::::::::::我是万恶的分割线::::::::::::::::

请您能不能解释一下 代码3

我很感兴趣,但是不明白原理,从第三行开始显示,然后查找"."吗?那如何进行数量判断?

TOP

回复 6# pZjVa0


    麻烦兄弟先测试再发表结论。。。
***共同提高***

TOP

本帖最后由 CrLf 于 2013-7-26 03:01 编辑

回复 2# batman


可以用 find /c 简化成:
  1. @echo off
  2. for /f "delims=" %%a in ('tasklist /fo csv^|find /i /c ""qq.exe""') do if %%a gtr 2 calc.exe
复制代码
或者这样:
  1. @echo off
  2. for /f "skip=2" %%a in ('tasklist /nh /fi "imagename eq qq.exe"') do calc.exe&goto next
  3. :next
复制代码
要极简就类似这样:
  1. @echo off
  2. tasklist /fi "imagename eq qq.exe"|more +3|findstr .&&calc.exe
复制代码
1

评分人数

TOP

返回列表