中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-16 06:19
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何检测特定进程 查看 1,929 回复 12
楼 主 如何检测特定进程 发表于 2007-02-17 03:18 ·  中国 山东 青岛 联通
初级用户
积分 20
发帖 7
注册 2007-02-17 02:38
UID 79666
性别 男
状态 离线
我想实现这样一个功能:用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 发表于 2007-02-17 03:28 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
UID 74552
性别 男
状态 离线
tasklist | findstr "1.exe 2.exe 3.exe"&&goto :p

for不会接受传递自tasklist的数据,它是打in来定义的
3 发表于 2007-02-17 03:31 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
UID 79003
性别 男
状态 离线
@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 发表于 2007-02-17 03:42 ·  中国 山东 青岛 联通
初级用户
积分 20
发帖 7
注册 2007-02-17 02:38
UID 79666
性别 男
状态 离线
挖,好快啊!
谢2楼滴!
3楼slore,你的例子中'tasklist /NH'的/NH是什么意思啊?还有
if defined %%i echo %%i 这个我还不太懂。
pause>nul 又是什么意思呢? 我菜,嘿嘿,麻烦再具体点,谢谢。
5 发表于 2007-02-17 03:46 ·  中国 山东 青岛 联通
初级用户
积分 20
发帖 7
注册 2007-02-17 02:38
UID 79666
性别 男
状态 离线
我发现这个论坛气氛真是好,找到这样一个好的学习地方真不容易!请各位多多指点,嘿嘿!
6 发表于 2007-02-17 05:14 ·  中国 广东 湛江 电信
高级用户
★★★
积分 959
发帖 311
注册 2006-04-11 14:08
UID 53665
性别 男
来自 广东-LianJiang
状态 离线
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
把显示结果屏蔽掉了,不在屏幕上显示
κχυμγνξοθπρωψιαδλεηφβτζσ┬╀┾┳┞┯┰┱┣┲┳╂╁│├┟┭┠这是什么??这就是我的人生
7 发表于 2010-03-22 21:15 ·  中国 浙江 杭州 电信VDSL
初级用户
积分 21
发帖 10
注册 2007-11-20 22:37
UID 103273
性别 男
状态 离线
3楼代码能找到指定进程吗?写错了吧。
8 发表于 2010-03-22 21:27 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
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 ]
9 发表于 2010-03-22 21:28 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
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 ]
10 发表于 2010-03-22 21:35 ·  中国 浙江 杭州 电信VDSL
初级用户
积分 21
发帖 10
注册 2007-11-20 22:37
UID 103273
性别 男
状态 离线
是我误解了!不好意思啊~~
我误以为 set 1.exe=被定义的程序中 1.exe 就是 1.exe,其实应该是将被Kill的进程。而“被定义的程序”,则随便写了……
恩 ~向大牛学习,谢谢楼上指点!
11 发表于 2010-03-22 21:40 ·  中国 浙江 杭州 电信VDSL
初级用户
积分 21
发帖 10
注册 2007-11-20 22:37
UID 103273
性别 男
状态 离线
还有个问题:


@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 发表于 2010-03-22 21:43 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
你运行我写的代码测试下看,就知道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 发表于 2010-03-22 21:46 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
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 ]
论坛跳转: