中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: 如何检测特定进程 上一主题 | 下一主题
gromancer
初级用户





积分 20
发帖 7
注册 2007-2-17
状态 离线
『楼 主』:  如何检测特定进程

我想实现这样一个功能:用tasklist列出当前进程清单,然后用find来搜索进程中是否含有1.exe,2.exe,3.exe......(假设啊)如果清单中含有其中一个就执行某个操作。我想用FOR来实现循环可是怎么试也不行啊!!我是这样试的: tasklist | for %%j in (1.exe,2.exe,3.exe) do find "%%j" && goto :p find是不是不能用for啊?请高人指点。 [ Last edited by namejm on 2007-2-20 at 02:56 PM ]


2007-2-17 03:18
查看资料  发送邮件  发短消息  网志   编辑帖子
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 2 楼』:  

tasklist | findstr "1.exe 2.exe 3.exe"&&goto :p for不会接受传递自tasklist的数据,它是打in来定义的


2007-2-17 03:28
查看资料  发短消息  网志   编辑帖子
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 3 楼』:  

@echo off set 1.exe=被定义的程序 set 2.exe=被定义的程序 set 3.exe=被定义的程序 for /f "tokens=1" %%i in ('tasklist /NH') do ( if defined %%i echo %%i ) pause>nul


2007-2-17 03:31
查看资料  发短消息  网志   编辑帖子
gromancer
初级用户





积分 20
发帖 7
注册 2007-2-17
状态 离线
『第 4 楼』:  

挖,好快啊! 谢2楼滴! 3楼slore,你的例子中'tasklist /NH'的/NH是什么意思啊?还有 if defined %%i echo %%i 这个我还不太懂。 pause>nul 又是什么意思呢? 我菜,嘿嘿,麻烦再具体点,谢谢。


2007-2-17 03:42
查看资料  发送邮件  发短消息  网志   编辑帖子
gromancer
初级用户





积分 20
发帖 7
注册 2007-2-17
状态 离线
『第 5 楼』:  

我发现这个论坛气氛真是好,找到这样一个好的学习地方真不容易!请各位多多指点,嘿嘿!


2007-2-17 03:46
查看资料  发送邮件  发短消息  网志   编辑帖子
qasa
高级用户




积分 959
发帖 311
注册 2006-4-11
来自 广东-LianJiang
状态 离线
『第 6 楼』:  

Originally posted by gromancer at 2007-2-17 03:42: 挖,好快啊! 谢2楼滴! 3楼slore,你的例子中'tasklist /NH'的/NH是什么意思啊?还有 if defined %%i echo %%i 这个我还不太懂。 pause>nul 又是什么意思呢? 我菜,嘿嘿,麻烦再具体点,谢谢。
TASKLIST /NH 指定栏标头不应该在输出中显示。 只对 "TABLE" 和 "CSV" 格式有效。 if defined .... 如果已定义环境变量,DEFINED 条件的作用是它取得一个环境变量 pause >nul 把显示结果屏蔽掉了,不在屏幕上显示




κχυμγνξοθπρωψιαδλεηφβτζσ┬╀┾┳┞┯┰┱┣┲┳╂╁│├┟┭┠这是什么??这就是我的人生
2007-2-17 05:14
查看资料  发送邮件  发短消息  网志   编辑帖子
longmarchw
初级用户





积分 21
发帖 10
注册 2007-11-20
状态 离线
『第 7 楼』:  

3楼代码能找到指定进程吗?写错了吧。


2010-3-22 21:15
查看资料  发短消息  网志   编辑帖子
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 8 楼』:  

Originally posted by longmarchw at 2010-3-22 21:15: 3楼代码能找到指定进程吗?写错了吧。
三楼滴代码没任何问题 三楼滴是传说中的牛人
@echo off
set qq.exe=腾迅QQ&set explorer.exe=外壳&set iexplore.exe=浏览器&for /f %%i in ('tasklist /NH') do if defined %%i call echo %%%%i%%%%i
pause>nul 
[ Last edited by Hanyeguxing on 2010-3-22 at 21:37 ]




2010-3-22 21:27
查看资料  发送邮件  发短消息  网志   编辑帖子
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 9 楼』:  

Originally posted by longmarchw at 2010-3-22 21:15: 3楼代码能找到指定进程吗?写错了吧。
三楼滴代码没任何问题 三楼滴是传说中的牛人
@echo off
set qq.exe=腾迅QQ&set explorer.exe=外壳&set iexplore.exe=浏览器&for /f  %%i in ('tasklist /NH') do if defined %%i call echo %%%%i%%%%i
pause>nul 
[ Last edited by Hanyeguxing on 2010-3-22 at 21:36 ]




2010-3-22 21:28
查看资料  发送邮件  发短消息  网志   编辑帖子
longmarchw
初级用户





积分 21
发帖 10
注册 2007-11-20
状态 离线
『第 10 楼』:  

是我误解了!不好意思啊~~ 我误以为 set 1.exe=被定义的程序中 1.exe 就是 1.exe,其实应该是将被Kill的进程。而“被定义的程序”,则随便写了…… 恩 ~向大牛学习,谢谢楼上指点!


2010-3-22 21:35
查看资料  发短消息  网志   编辑帖子
longmarchw
初级用户





积分 21
发帖 10
注册 2007-11-20
状态 离线
『第 11 楼』:  

还有个问题: @echo off set notepad.exe=notepad.exe set mspaint.exe=mspaint.exe set calc.exe=calc.exe set num=0 setlocal EnableDelayedExpansion for /f "tokens=1" %%i in ('tasklist /NH') do ( if defined %%i ( echo kill... %%i taskkill /f /t /im %%i set/A num=!num!+1 ) ) echo %num% processes were terminated. pause>nul 如果 taskkill /f /t /im %%i 语句写错了。 num还会累加,怎么处理不让它累加呢?


2010-3-22 21:40
查看资料  发短消息  网志   编辑帖子
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 12 楼』:  

你运行我写的代码测试下看,就知道set qq.exe=腾迅QQ可不一定是随便写写的 call echo %%%%i%%%%i中: 对于set来说,%%%%i%%显示的是set时的值,%%i显示的是set时的名。 对于for来说,%%i显示的是变量的值,%%%%i%%显示的是以%%i变量值为名的变量的值。 在开启变量延迟时,call echo %%%%i%%%%i写成echo !%%i!%%i,这样就更明显了 运行后如下返回: 外壳explorer.exe 腾迅QQQQ.exe 浏览器iexplore.exe 浏览器iexplore.exe 浏览器iexplore.exe [ Last edited by Hanyeguxing on 2010-3-22 at 21:51 ]




2010-3-22 21:43
查看资料  发送邮件  发短消息  网志   编辑帖子
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 13 楼』:  

Originally posted by longmarchw at 2010-3-22 21:40: @echo off set notepad.exe=notepad.exe set mspaint.exe=mspaint.exe set calc.exe=calc.exe set num=0 setlocal EnableDelayedExpansion for /f "tokens=1" %%i in ('tasklist /NH') do ( if defined %%i ( echo kill... %%i taskkill /f /t /im %%i set/A num=!num!+1 ) ) echo %num% processes were terminated. pause>nul 如果 taskkill /f /t /im %%i 语句写错了。 num还会累加,怎么处理不让它累加呢?
任何批处理都是按他写对了来算的。。。 错误的结果也不一样,不一定会累加,甚至都可能不会运行 可以使用if来检测错误%ERRORLEVEL% [ Last edited by Hanyeguxing on 2010-3-22 at 21:53 ]




2010-3-22 21:46
查看资料  发送邮件  发短消息  网志   编辑帖子

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: