中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-02 05:55
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 关于进程 查看 1,231 回复 9
楼 主 关于进程 发表于 2006-09-23 02:34 ·  中国 云南 昆明 电信
初级用户
★★
积分 134
发帖 50
注册 2006-03-28 13:50
20年会员
UID 52939
状态 离线
请问怎样判断进程是否存在?请给个列子。谢谢各位!
2 发表于 2006-09-23 02:42 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  XP下,可以用tasklist命令来列出当前进程。

tasklist|findstr /i "×××.exe">nul && echo "×××.exe"正在运行||echo ""×××.exe"没有运行
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
3 发表于 2006-09-23 03:18 ·  中国 云南 昆明 电信
初级用户
★★
积分 134
发帖 50
注册 2006-03-28 13:50
20年会员
UID 52939
状态 离线
谢谢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 发表于 2006-09-23 06:36 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  | 管道符号。表示把前面命令的输出作为后面命令的输入。比如 echo abc|find "a" 表示把 echo 的输出结果abc字符串作为 find "a" 的搜索对象;
  && 连接符号。如果前面的语句执行成功,则执行后面的语句;
  || 连接符号。和 && 的意思正好相反,表示如果前面的语句执行失败,就执行后面的语句。

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

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

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

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

@echo off
tasklist|find /i "qq.exe">nul && (
taskkill /f /T /im "qq.exe">nul
echo 进程 qq.exe 被结束
) || (
echo 没有发现进程 qq.exe
)
pause
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
5 发表于 2006-09-23 09:23 ·  中国 云南 昆明 电信
初级用户
★★
积分 134
发帖 50
注册 2006-03-28 13:50
20年会员
UID 52939
状态 离线
非常感谢你的回答,你让我学到了很多东西.由衷的谢谢您,namejm!比如我想结束几个进程,但有的运行了有的没有运行,所以才想加入判断,有则结束,没有则跳过?用你4楼的代码结束一两还可以。不过结束的进程多了,代码也就多了。代码执行效率就差了。有没有什么更好的代码呢?

[ Last edited by xg911335 on 2006-9-23 at 09:26 ]
6 发表于 2006-09-23 21:55 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
回楼上,结束进程很快的啊,结束多进程加个 txt文件就是了,何来代码多?
7 发表于 2006-09-24 07:20 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线
『第 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 /f /T /im "exe1.exe" /im "exe2.exe" /im "exe3.exe" ... 2>nul

不需要你自己判断,taskkill能够应付这种情况。
8 ::查找进程中有无指定的运行程序.bat 发表于 2006-09-24 09:18 ·  新加坡 腾讯云
初级用户
积分 73
发帖 30
注册 2006-09-18 08:35
19年会员
UID 62944
状态 离线
::查找进程中有无指定的运行程序.bat
::------------BY MOBO
::查看进程:
wmic process where name='explorer.exe' get caption>out.txt
::终止进程:
wmic process where name='explorer.exe' call terminate
::用WMIC有很多功能,望大家深挖,共同交流.
9 发表于 2006-09-24 13:32 ·  中国 云南 昆明 电信
初级用户
★★
积分 134
发帖 50
注册 2006-03-28 13:50
20年会员
UID 52939
状态 离线
谢谢各位朋友.已结!
10 发表于 2006-10-22 08:15 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线

──────────────── 版务记录 ────────────────
执行:namejm
原标题:关于进程
说明:因标题过于模糊,不便于论坛的搜索和管理,请在三日内修改标题。
提示:修改标题请在当前帖的右下脚点
编辑修改完毕之后按 编辑帖子 即可。
处罚:因属论坛新人,暂时不予处罚;若三日之后尚未修改标题,将扣除4点积分,
以示惩罚,并由版主强制修改标题。请点击
这里阅读论坛发帖规定,以避免在
今后的讨论中违规发帖。
──────────────── 版务记录 ────────────────
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
论坛跳转: