标题: [系统相关] [已解决]检索系统无用进程的批处理为何出错? [打印本页]
作者: 白夜 时间: 2013-1-24 19:25 标题: [已解决]检索系统无用进程的批处理为何出错?
我是初学者,对于批处理还不熟,会的就帮我分析一下吧。
下面是我写的代码,望指教。- @echo off
- setlocal enabledelayedexpansion
- cls
- ::设置关键进程列表
- set systemstr=[系统关键进程] System.exe smss.exe sched.exe csrss.exe avguard.exe avshadow.exe avgnt.exe spoolsv.exe Userinit.exe cmd.exe taskkill.exe wininit.exe services.exe winlogon.exe lsass.exe lsm.exe svchost.exe dwm.exe conhost.exe SearchProtocolHost.exe taskhost.exe TPAutoConnect.exe TPAutoConnSvc.exe spoolsv.exe vmacthlp.exe wmiprvse.exe SearchFilterHost.exe alg.exe razerhid.exe razerofa.exe LogonUI.exe mDNSResponder.exe vmusrvc.exe vmsrvc.exe vpcmap.exe conime.exe wlms.exe LMS.exe savedump.exe audiodg.exe NvXDSync.exe nvvsvc.exe WUDFHost.exe dllhost.exe spoolsv.exe conhost.exe tasklist.exe
-
- ::提取列表进程名并输出WhiteList.ini
- for %%q in (%systemstr%) do echo %%q>>WhiteList.ini
-
- ::获取当前运行的所有进程并输出为task.ini
- for /f "skip=3 tokens=1 delims= " %%d in ('tasklist') do echo %%d>>task.ini
-
- ::查找当前运行的进程中属于关键进程并输出systemlist.ini
- for /f "skip=3 tokens=1 delims= " %%a in ('tasklist') do (findstr /i "%%a" WhiteList.ini)>>systemlist.ini
-
- ::设置当前关键进程为变量replaced
- for /f "tokens=1 delims= " %%b in (systemlist.ini) do (set replaced=%%b)
-
- ::[color=Red]查找task.ini中的关键进程,如存在则替换为;只保留非关键进程名(此处出错,replaced只获得最后一个数据)[/color]
- for /f "tokens=1" %%i in ('type "task.ini"') do (
- set str=%%i
- set "str=!str:%replaced%=;!"
- echo !str!>>mp.txt
- )
-
- ::清除临时配置文件
- del /f /q "systemlist.ini"
- del /f /q "task.ini"
- move mp.txt task.ini>nul
- start task.ini
- pause
复制代码
作者: 白夜 时间: 2013-1-24 19:29
潜力贴留名
作者: BAT-VBS 时间: 2013-1-24 21:04
- @echo off
- setlocal enabledelayedexpansion
- cls
- ::设置关键进程列表
- set systemstr=[系统关键进程] System.exe smss.exe sched.exe csrss.exe avguard.exe avshadow.exe avgnt.exe spoolsv.exe Userinit.exe cmd.exe taskkill.exe wininit.exe services.exe winlogon.exe lsass.exe lsm.exe svchost.exe dwm.exe conhost.exe SearchProtocolHost.exe taskhost.exe TPAutoConnect.exe TPAutoConnSvc.exe spoolsv.exe vmacthlp.exe wmiprvse.exe SearchFilterHost.exe alg.exe razerhid.exe razerofa.exe LogonUI.exe mDNSResponder.exe vmusrvc.exe vmsrvc.exe vpcmap.exe conime.exe wlms.exe LMS.exe savedump.exe audiodg.exe NvXDSync.exe nvvsvc.exe WUDFHost.exe dllhost.exe spoolsv.exe conhost.exe tasklist.exe
-
- ::提取列表进程名并输出WhiteList.ini
- for %%q in (%systemstr%) do echo %%q>>WhiteList.ini
-
- ::获取当前运行的所有进程并输出为task.ini
- for /f "skip=3 tokens=1 delims= " %%d in ('tasklist') do echo %%d>>task.ini
-
- ::查找当前运行的进程中属于关键进程并输出systemlist.ini
- for /f "skip=3 tokens=1 delims= " %%a in ('tasklist') do (findstr /i "%%a" WhiteList.ini)>>systemlist.ini
-
- for /f "tokens=1 delims= " %%b in (systemlist.ini) do (
- for /f "tokens=1" %%i in ('type "task.ini"') do (
- set str=%%i
- set "str=!str:%%b=;!"
- echo !str!>>mp.txt
- )
- )
- ::清除临时配置文件
- del /f /q "systemlist.ini"
- del /f /q "task.ini"
- move mp.txt task.ini>nul
- start task.ini
- pause
复制代码
作者: 白夜 时间: 2013-1-24 21:52
回复 3# BAT-VBS
这样的写法不对,造成重复输出了,而且也没办法清除相同内容
作者: BAT-VBS 时间: 2013-1-24 22:44
回复 4# 白夜
我只是把顶楼代码的逻辑错误修改了一下,如果功能上不符合需求,你可以再斟酌一下先,实在搞不定再问。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |