中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-02 06:50
48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,250 会员排行
DOS批处理 & 脚本技术(批处理室) » 关于进程
可打印版本  1,233 / 9
第1楼 xg911335 发表于 2006-09-23 02:34
初级用户 发帖 50 积分 134
关于进程
请问怎样判断进程是否存在?请给个列子。谢谢各位!
第2楼 namejm 发表于 2006-09-23 02:42
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  XP下,可以用tasklist命令来列出当前进程。
第3楼 xg911335 发表于 2006-09-23 03:18
初级用户 发帖 50 积分 134
谢谢namejm,麻烦你帮我解释一下|、&&、||这几个的含义。
@for /f %%i in ('tasklist ^|find /i "xxx.exe"') do (
@if %%i =="" goto end
taskkill /f /im %%i /T >unl
echo %%i进程被结束
)
:end
echo %%i没有发现进程
pause

执行完会显示
echo %i没有发现进程
echo %i没有发现进程
怎么会这样?

[ Last edited by xg911335 on 2006-9-23 at 03:46 ]
第4楼 namejm 发表于 2006-09-23 06:36
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  | 管道符号。表示把前面命令的输出作为后面命令的输入。比如 echo abc|find "a" 表示把 echo 的输出结果abc字符串作为 find "a" 的搜索对象;
  && 连接符号。如果前面的语句执行成功,则执行后面的语句;
  || 连接符号。和 && 的意思正好相反,表示如果前面的语句执行失败,就执行后面的语句。

  你在『第 3 楼』的代码存在如下几个错误:

  1、如果成功关闭了 xxx.exe ,那么,echo %%i进程被结束 这一句执行之后,因为它之后再没有跳转语句,所以会继续执行 :end 标签段的内容;

  2、因为 %%i 是 for 语句中的变量,一旦for语句执行完毕之后,就不能再用 %%i 的格式来引用变量,而应换成百分号对中夹字符的%var%格式;

  另外,如果当前进程中没有你find的内容,for语句将没有任何输出,用空字符串来判断的方法好象不太成功,原因暂时还位找到。以下语句应该可以满足你的需求:
第5楼 xg911335 发表于 2006-09-23 09:23
初级用户 发帖 50 积分 134
非常感谢你的回答,你让我学到了很多东西.由衷的谢谢您,namejm!比如我想结束几个进程,但有的运行了有的没有运行,所以才想加入判断,有则结束,没有则跳过?用你4楼的代码结束一两还可以。不过结束的进程多了,代码也就多了。代码执行效率就差了。有没有什么更好的代码呢?

[ Last edited by xg911335 on 2006-9-23 at 09:26 ]
第6楼 vkill 发表于 2006-09-23 21:55
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
回楼上,结束进程很快的啊,结束多进程加个 txt文件就是了,何来代码多?
第7楼 3742668 发表于 2006-09-24 07:20
荣誉版主 发帖 718 积分 2,013
『第 4 楼』:

....
另外,如果当前进程中没有你find的内容,for语句将没有任何输出,用空字符串来判断的方法好象不太成功,原因暂时还位找到...

如果没有find的内容,其实这段代码:

@for /f %%i in ('tasklist ^|find /i "xxx.exe"') do (
@if %%i =="" goto end
taskkill /f /im %%i /T >unl
echo %%i进程被结束
)

执行的情况应该为:

@for /f %%i in () do ...

既然没有循环条件,那么循环就一次也不会执行

『第 5 楼』:

非常感谢你的回答,你让我学到了很多东西.由衷的谢谢您,namejm!比如我想结束几个进程,但有的运行了有的没有运行,所以才想加入判断,有则结束,没有则跳过?....


不需要你自己判断,taskkill能够应付这种情况。
第8楼 mobo 发表于 2006-09-24 09:18
初级用户 发帖 30 积分 73
::查找进程中有无指定的运行程序.bat
::查找进程中有无指定的运行程序.bat
::------------BY MOBO
::查看进程:
wmic process where name='explorer.exe' get caption>out.txt
::终止进程:
wmic process where name='explorer.exe' call terminate
::用WMIC有很多功能,望大家深挖,共同交流.
第9楼 xg911335 发表于 2006-09-24 13:32
初级用户 发帖 50 积分 134
谢谢各位朋友.已结!
第10楼 namejm 发表于 2006-10-22 08:15
荣誉版主 发帖 1,737 积分 5,226 来自 成都

──────────────── 版务记录 ────────────────
执行:namejm
原标题:关于进程
说明:因标题过于模糊,不便于论坛的搜索和管理,请在三日内修改标题。
提示:修改标题请在当前帖的右下脚点
编辑修改完毕之后按 编辑帖子 即可。
处罚:因属论坛新人,暂时不予处罚;若三日之后尚未修改标题,将扣除4点积分,
以示惩罚,并由版主强制修改标题。请点击
这里阅读论坛发帖规定,以避免在
今后的讨论中违规发帖。
──────────────── 版务记录 ────────────────
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023