中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-12 00:38
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求助:通过bat文件杀cmd进程的问题 查看 1,173 回复 5
楼 主 求助:通过bat文件杀cmd进程的问题 发表于 2009-06-16 09:52 ·  中国 湖南 湘潭 电信
初级用户
积分 61
发帖 45
注册 2008-07-11 23:33
18年会员
UID 121388
性别 男
状态 离线
@echo off
copy %systemroot%\system32\cmd.exe %systemroot%\system32\tmp.exe /y
echo @echo off >tmp.bat
echo for /f %%i in ('tasklist') do if /i %%i==cmd.exe (taskkill /f /im cmd.exe) >>tmp.bat
echo pause >>tmp.bat
echo del %systemroot%\system32\tmp.exe>>tmp.bat
start tmp.exe /c tmp.bat

真的想不明白为什么启不动tmp.exe
我把最后一句改成start tmp.exe
就没问题,带参数启动杀CMD进程就不行
启动tmp.exe后再杀cmd.exe又没影响,不知道出错在哪里。求解
用CALL也不行……

[ Last edited by okzhsh01 on 2009-6-16 at 10:06 ]
2 发表于 2009-06-16 12:41 ·  中国 湖南 湘潭 电信
初级用户
积分 61
发帖 45
注册 2008-07-11 23:33
18年会员
UID 121388
性别 男
状态 离线
高手帮帮忙……
一个晚上就这样等过去了
很郁闷……
3 发表于 2009-06-16 14:20 ·  中国 吉林 延边朝鲜族自治州 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
echo for /f %%i in ('tasklist') do if /i %%i==cmd.exe (taskkill /f /im cmd.exe) >>tmp.bat
应该写成
echo for /f %%%%i in ('tasklist') do if /i %%%%i==cmd.exe (taskkill /f /im cmd.exe) >>tmp.bat
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
okzhsh01 +2 2009-06-17 01:38
4 发表于 2009-06-16 15:16 ·  中国 湖南 湘潭 电信
初级用户
积分 61
发帖 45
注册 2008-07-11 23:33
18年会员
UID 121388
性别 男
状态 离线
非常感谢
查了下请问下是不是和
call echo 这个变量反复调用一样的原理?

能否介绍下%%%%I的来由?
5 发表于 2009-06-17 01:19 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
在echo 输出的字符中含有^ | & > >> < 时,前面要加转义符,输出%时,要加倍使用,例如要输出一个%,则应写成echo %% >han.txt,要输出%%i,则应写成echo %%%%i>han.txt.

对于",我们一般成对使用,在输出的时候没问题.如果是奇数个",则必须在某一"前加转义符^.
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
okzhsh01 +2 2009-06-17 01:38
6 发表于 2009-06-19 02:36 ·  中国 江苏 苏州 电信
新手上路
积分 6
发帖 6
注册 2009-04-16 08:44
17年会员
UID 143076
性别 男
状态 离线
@echo off
copy %systemroot%\system32\cmd.exe %systemroot%\system32\tmp.exe /y
echo @echo off >tmp.bat
echo tasklist ^| findstr /i "cmd.exe" ^&^& taskkill /f /im cmd.exe >>tmp.bat
echo pause >>tmp.bat
echo del %systemroot%\system32\tmp.exe>>tmp.bat
start tmp.exe /c tmp.bat
论坛跳转: