中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-06 10:14
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 结束除系统进程以外的进程的问题 查看 877 回复 6
楼 主 结束除系统进程以外的进程的问题 发表于 2007-11-10 21:25 ·  中国 江苏 无锡 宜兴市 电信
中级用户
★★
积分 487
发帖 212
注册 2007-04-01 08:22
19年会员
UID 83597
性别 男
状态 离线
我在论坛看到这段代码,说是可以杀掉除下列Process.ini配置文件里面的进程的P处理,我实际运行了下,根本无法实现,不知道是这么回事情,请教各位下,请指出哪错误了,并帮忙写出代码.谢谢!~

@echo off&Setlocal EnableDelayedExpansion
for /f "tokens=1 delims=," %%a in ('tasklist /nh /FO CSV') do (
for /f "delims=" %%b in (Process.ini) do (
set /a flag+=1
if /i not %%a=="%%b" set /a num+=1
)
if !flag! equ !num! taskkill /f /im %%a
set /a flag=num=0
)
echo the end...

Process.ini进程如下

alg.exe
csrss.exe
explorer.exe
lsass.exe
smss.exe
ctfmon.exe
services.exe
svchost.exe
winlogon.exe
System
System Idle Process
Wscript.exe
cmd.exe

还有,我是用P处理生成如上程序,保存为TASKKILL.BAT
能正常输出,但却被过滤掉了一个%,应该不影响使用吧??

我是这么写的...
@echo off
echo @echo off^&Setlocal EnableDelayedExpansion >>c:\taskkill.bat
echo for /f "tokens=1 delims=," %%a in ('tasklist /nh /FO CSV') do ( >>c:\taskkill.bat
echo for /f "delims=" %%b in (123.ini) do ( >>c:\taskkill.bat
echo set /a flag+=1 >>c:\taskkill.bat
echo if /i not %%a=="%%b" set /a num+=1 >>c:\taskkill.bat
echo ) >>c:\taskkill.bat
echo if !flag! equ !num! taskkill /f /im %%a >>c:\taskkill.bat
echo set /a flag=num=0 >>c:\taskkill.bat
echo ) >>c:\taskkill.bat
echo echo the end... >>c:\taskkill.bat


输出效果为:


@echo off&Setlocal EnableDelayedExpansion
for /f "tokens=1 delims=," %a in ('tasklist /nh /FO CSV') do (
for /f "delims=" %b in (123.ini) do (
set /a flag+=1
if /i not %a=="%b" set /a num+=1
)
if !flag! equ !num! taskkill /f /im %a
set /a flag=num=0
)
echo the end...

请各位帮忙完善下代码,并指出是什么原因导致无法正常运行的....

[ Last edited by luckboy45 on 2007-11-11 at 06:33 PM ]
2 发表于 2007-11-10 23:21 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
多加2个%%输出
简单!简单!再简单!
3 发表于 2007-11-11 08:37 ·  中国 江苏 无锡 宜兴市 电信
中级用户
★★
积分 487
发帖 212
注册 2007-04-01 08:22
19年会员
UID 83597
性别 男
状态 离线
虽然能实现输出了,但问题是,这代码运行后就提示进程输出的管道不存在???是代码本身就是错误的么?请各位帮帮忙啊!~

刚才又运行出现---已经达到最大的SETLOCAL递归层.....代码似乎是死循环...有谁看的懂解释下啊!~在线等,希望各位帮帮我!~

[ Last edited by luckboy45 on 2007-11-11 at 08:49 AM ]
4 发表于 2007-11-11 11:02 ·  中国 江苏 无锡 宜兴市 电信
中级用户
★★
积分 487
发帖 212
注册 2007-04-01 08:22
19年会员
UID 83597
性别 男
状态 离线
没人乐意帮忙么?汗...我顶下...
5 发表于 2007-11-11 11:19 ·  中国 北京 华为云
银牌会员
★★★
积分 1,436
发帖 739
注册 2007-10-11 17:44
18年会员
UID 99469
性别 男
状态 离线
@echo off
for /f "delims=," %%a in ('tasklist /nh /FO CSV') do (
find "%%~a">nul 2>nul||taskkill /f /im "%%~a"
)
echo the end...
pause>nul
6 发表于 2007-11-11 16:45 ·  中国 江苏 无锡 宜兴市 电信
中级用户
★★
积分 487
发帖 212
注册 2007-04-01 08:22
19年会员
UID 83597
性别 男
状态 离线
感谢5楼的朋友热情回复

我要实现的是,结束掉除了alg.exe
csrss.exe
explorer.exe
lsass.exe
smss.exe
ctfmon.exe
services.exe
svchost.exe
winlogon.exe
System
System Idle Process
Wscript.exe
cmd.exe

以外是所有进程啊,你这个代码%%~A我不懂何意思,只知道找不到%%~A就执行TASKLIST命令.....请帮忙解释下!~谢谢!~
7 发表于 2007-11-11 22:45 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
这样呢?

@echo off
for /f "tokens=1 delims=," %%i in ('tasklist /nh /FO CSV') do (
find /i %%i Process.ini
if errorlevel 1 taskkill /f /im %%i
)
pause
简单!简单!再简单!
论坛跳转: