![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-12 12:52 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 如何检测特定进程 |
| 可打印版本 2,021 / 12 |
| 第1楼 gromancer | 发表于 2007-02-17 03:18 |
| 初级用户 发帖 7 积分 20 | |
|
如何检测特定进程 我想实现这样一个功能:用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 ] |
|
| 第2楼 everest79 | 发表于 2007-02-17 03:28 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
tasklist | findstr "1.exe 2.exe 3.exe"&&goto :p
for不会接受传递自tasklist的数据,它是打in来定义的 |
|
| 第3楼 slore | 发表于 2007-02-17 03:31 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
@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 |
|
| 第4楼 gromancer | 发表于 2007-02-17 03:42 |
| 初级用户 发帖 7 积分 20 | |
|
挖,好快啊!
谢2楼滴! 3楼slore,你的例子中'tasklist /NH'的/NH是什么意思啊?还有 if defined %%i echo %%i 这个我还不太懂。 pause>nul 又是什么意思呢? 我菜,嘿嘿,麻烦再具体点,谢谢。 |
|
| 第5楼 gromancer | 发表于 2007-02-17 03:46 |
| 初级用户 发帖 7 积分 20 | |
|
我发现这个论坛气氛真是好,找到这样一个好的学习地方真不容易!请各位多多指点,嘿嘿!
|
|
| 第6楼 qasa | 发表于 2007-02-17 05:14 |
| 高级用户 发帖 311 积分 959 来自 广东-LianJiang | |
Originally posted by gromancer at 2007-2-17 03:42: TASKLIST /NH |
|
| 第7楼 longmarchw | 发表于 2010-03-22 21:15 |
| 初级用户 发帖 10 积分 21 | |
|
3楼代码能找到指定进程吗?写错了吧。
|
|
| 第8楼 Hanyeguxing | 发表于 2010-03-22 21:27 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
Originally posted by longmarchw at 2010-3-22 21:15: 三楼滴代码没任何问题 三楼滴是传说中的牛人 [ Last edited by Hanyeguxing on 2010-3-22 at 21:37 ] |
|
| 第9楼 Hanyeguxing | 发表于 2010-03-22 21:28 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
Originally posted by longmarchw at 2010-3-22 21:15: 三楼滴代码没任何问题 三楼滴是传说中的牛人 [ Last edited by Hanyeguxing on 2010-3-22 at 21:36 ] |
|
| 第10楼 longmarchw | 发表于 2010-03-22 21:35 |
| 初级用户 发帖 10 积分 21 | |
|
是我误解了!不好意思啊~~
我误以为 set 1.exe=被定义的程序中 1.exe 就是 1.exe,其实应该是将被Kill的进程。而“被定义的程序”,则随便写了…… 恩 ~向大牛学习,谢谢楼上指点! |
|
| 第11楼 longmarchw | 发表于 2010-03-22 21:40 |
| 初级用户 发帖 10 积分 21 | |
|
还有个问题:
@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还会累加,怎么处理不让它累加呢? |
|
| 第12楼 Hanyeguxing | 发表于 2010-03-22 21:43 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
你运行我写的代码测试下看,就知道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 ] |
|
| 第13楼 Hanyeguxing | 发表于 2010-03-22 21:46 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
Originally posted by longmarchw at 2010-3-22 21:40: 任何批处理都是按他写对了来算的。。。 错误的结果也不一样,不一定会累加,甚至都可能不会运行 可以使用if来检测错误%ERRORLEVEL% [ Last edited by Hanyeguxing on 2010-3-22 at 21:53 ] |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |