找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 83506|回复: 19

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

[复制链接]
发表于 2013-7-26 00:43:19 | 显示全部楼层 |阅读模式
本帖最后由 pZjVa0 于 2013-7-27 12:27 编辑

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

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

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-7-26 01:07:18 | 显示全部楼层

  1. @echo off
  2. set /a n=0
  3. for /f "delims=" %%a in ('tasklist^|findstr /i "qq.exe"') do set /a n+=1
  4. if %n% gtr 2 calc.exe
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2013-7-26 01:31:06 | 显示全部楼层
回复 2# batman


    谢谢batman版主,传说中的n值又开始进行计算了
 楼主| 发表于 2013-7-26 01:56:53 | 显示全部楼层
回复 2# batman


    这个代码是不是少了一个循环?如果单纯这样的话不是只会+1就跑了吗?
 楼主| 发表于 2013-7-26 01:58:58 | 显示全部楼层
回复 2# batman


    忘了...for本身有循环
 楼主| 发表于 2013-7-26 02:18:30 | 显示全部楼层
回复 2# batman


    这个代码没有对进程名完成匹配,如果出现hkcmd.exe也会被计算进去
发表于 2013-7-26 02:55:05 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2013-7-26 08:13:28 | 显示全部楼层
回复 6# pZjVa0


    麻烦兄弟先测试再发表结论。。。
 楼主| 发表于 2013-7-26 08:35:37 | 显示全部楼层
本帖最后由 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

我很感兴趣,但是不明白原理,从第三行开始显示,然后查找"."吗?那如何进行数量判断?
发表于 2013-7-26 11:53:32 | 显示全部楼层
批处理自身会产生进程
 楼主| 发表于 2013-7-26 11:59:48 | 显示全部楼层
回复 10# lxzzr


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

一个cmd.exe算一个P,那其余多出来的是肿么回事呢?
发表于 2013-7-26 17:22:04 | 显示全部楼层
回复 11# pZjVa0


    有一个 cmd 是 for /f 产生的,刚给人解释过:
http://bbs.bathome.net/redirect. ... 6&fromuid=30406
 楼主| 发表于 2013-7-26 17:57:30 | 显示全部楼层
回复 12# CrLf


    好的。我大概懂判断了
 楼主| 发表于 2013-7-26 20:40:01 | 显示全部楼层
回复 12# CrLf


    虽然问题基本解决..但是无法精确判断导致在不同环境下出现兼容性问题,WIN7下检测到3个,xp下有2个
 楼主| 发表于 2013-7-27 12:07:09 | 显示全部楼层
兼容性问题大家有办法解决不?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 13:24 , Processed in 0.024582 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表