找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 22533|回复: 4

[系统相关] [已解决]检索系统无用进程的批处理为何出错?

[复制链接]
发表于 2013-1-24 19:25:27 | 显示全部楼层 |阅读模式
我是初学者,对于批处理还不熟,会的就帮我分析一下吧。
下面是我写的代码,望指教。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cls
  4. ::设置关键进程列表
  5. 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

  6. ::提取列表进程名并输出WhiteList.ini
  7. for %%q in (%systemstr%) do echo %%q>>WhiteList.ini

  8. ::获取当前运行的所有进程并输出为task.ini
  9. for /f "skip=3 tokens=1 delims= " %%d in ('tasklist') do echo %%d>>task.ini

  10. ::查找当前运行的进程中属于关键进程并输出systemlist.ini
  11. for /f "skip=3 tokens=1 delims= " %%a in ('tasklist') do (findstr /i "%%a" WhiteList.ini)>>systemlist.ini

  12. ::设置当前关键进程为变量replaced
  13. for /f "tokens=1 delims= " %%b in (systemlist.ini) do (set replaced=%%b)

  14. ::[color=Red]查找task.ini中的关键进程,如存在则替换为;只保留非关键进程名(此处出错,replaced只获得最后一个数据)[/color]
  15. for /f "tokens=1" %%i in ('type "task.ini"') do (
  16.     set str=%%i
  17.     set "str=!str:%replaced%=;!"
  18.     echo !str!>>mp.txt
  19. )

  20. ::清除临时配置文件
  21. del /f /q "systemlist.ini"
  22. del /f /q "task.ini"
  23. move mp.txt task.ini>nul
  24. start task.ini
  25. pause
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2013-1-24 19:29:24 | 显示全部楼层
潜力贴留名
发表于 2013-1-24 21:04:16 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cls
  4. ::设置关键进程列表
  5. 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

  6. ::提取列表进程名并输出WhiteList.ini
  7. for %%q in (%systemstr%) do echo %%q>>WhiteList.ini

  8. ::获取当前运行的所有进程并输出为task.ini
  9. for /f "skip=3 tokens=1 delims= " %%d in ('tasklist') do echo %%d>>task.ini

  10. ::查找当前运行的进程中属于关键进程并输出systemlist.ini
  11. for /f "skip=3 tokens=1 delims= " %%a in ('tasklist') do (findstr /i "%%a" WhiteList.ini)>>systemlist.ini

  12. for /f "tokens=1 delims= " %%b in (systemlist.ini) do (
  13.     for /f "tokens=1" %%i in ('type "task.ini"') do (
  14.         set str=%%i
  15.         set "str=!str:%%b=;!"
  16.         echo !str!>>mp.txt
  17.     )
  18. )
  19. ::清除临时配置文件
  20. del /f /q "systemlist.ini"
  21. del /f /q "task.ini"
  22. move mp.txt task.ini>nul
  23. start task.ini
  24. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2013-1-24 21:52:24 | 显示全部楼层
回复 3# BAT-VBS

这样的写法不对,造成重复输出了,而且也没办法清除相同内容
发表于 2013-1-24 22:44:00 | 显示全部楼层
回复 4# 白夜


    我只是把顶楼代码的逻辑错误修改了一下,如果功能上不符合需求,你可以再斟酌一下先,实在搞不定再问。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 00:27 , Processed in 0.019409 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表