Board logo

标题: [系统相关] 批处理怎样查找并结束随机变量长文件名进程? [打印本页]

作者: dqwglm    时间: 2010-4-15 17:03     标题: 批处理怎样查找并结束随机变量长文件名进程?

最近网吧换了恒信一卡通以后开机在进程里会有一个随机的长文件名,有的不知道的就以为是机器中了病毒就在那乱叫,解释又不通,死活就说有病毒。。。于是在网上搜索了一些批处理找到了一个结束多余进程的批处理,还算挺好用的,能把一卡通那些多余的进程 结束掉,但唯一的就是那个很长的开机随机变名的那个进程结束不掉,只能查找到。。所以希望大家可否帮助一下,给小弟一份代码,在这里先谢过了。。

那2个长文件的名子,其中有一个是在任务管理器里能看到的,另一个则是看不到的,应该是隐藏了。。
  1. @echo off
  2. cd /d C:\
  3. echo wmiprvse.exe >kill.txt
  4. echo smss.exe >>kill.txt
  5. echo csrss.exe >>kill.txt
  6. echo services.exe >>kill.txt
  7. echo lsass.exe >>kill.txt
  8. echo winlogon.exe >>kill.txt
  9. echo svchost.exe >>kill.txt
  10. echo explorer.exe >>kill.txt
  11. echo sidebar.exe >>kill.txt
  12. echo RocketDock.exe >>kill.txt
  13. echo QQ.exe >>kill.txt
  14. echo TXPlatform.exe >>kill.txt
  15. echo svchost.exe >>kill.txt
  16. echo ctfmon.exe >>kill.txt
  17. :::::::::浏览器echo iexplore.exe >>kill.txt
  18. echo cmd.exe >>kill.txt
  19. echo tasklist.exe >>kill.txt
  20. echo QQ.exe >>kill.txt
  21. echo qq.exe >>kill.txt
  22. echo play.exe >>kill.txt
  23. ::::::::要长期保留的进程请加在这行上面,如echo xxoo.exe >>kill.txt这样的形式
  24. echo %1 >>kill.txt
  25. echo %2 >>kill.txt
  26. echo %3 >>kill.txt
  27. echo %4 >>kill.txt
  28. echo %5 >>kill.txt
  29. echo %6 >>kill.txt
  30. echo %7 >>kill.txt
  31. echo %8 >>kill.txt
  32. echo %9 >>kill.txt
  33. echo 程序工作中........................
  34. echo :::bat by 江南一根葱 :::
  35. echo 正在杀死进程,请稍候…………
  36. for /f "skip=5" %%i in ('tasklist') do call :kill %%i
  37. pause >nul
  38. :kill
  39. find "%1" C:\kill.txt >nul
  40. if not "%errorlevel%"=="0" taskkill /f /im %~n1.exe
复制代码

作者: GNU    时间: 2010-4-15 17:25

你是怎样结束进程的?
作者: hanyeguxing    时间: 2010-4-15 17:29

那个进程是做什么的?
作者: dqwglm    时间: 2010-4-15 17:29

怎样结束进程?什么意思?
作者: dqwglm    时间: 2010-4-15 17:30

具体的也没有去查过,猜测是自动跳转百度的,因为一直都有人反应,网页自动跳转百度,而多余的进程了只有那么一个了。。。
作者: hanyeguxing    时间: 2010-4-15 17:33

如果此进程非关键进程
你可以使用Taskkill来结束他,如果不成功,返回信息是什么?
然后,使用Ntsd看能否结束他。
作者: dqwglm    时间: 2010-4-15 17:40

原帖由 hanyeguxing 于 2010-4-15 17:33 发表
如果此进程非关键进程
你可以使用Taskkill来结束他,如果不成功,返回信息是什么?
然后,使用Ntsd看能否结束他。


我上面已经写的很清楚了,随机的,他每开机一次就会变一次,12位的文件名,如果是固定的文件名我也不用在这里问大家了我要直接用命令去结束随便一个就能结束,关键他不是随机的名子吗?不是固定的名子。
作者: GNU    时间: 2010-4-15 17:52     标题: 回复 4楼 的帖子

意思是希望你把“于是在网上搜索了一些批处理找到了一个结束多余进程的批处理”贴出来看看
作者: GNU    时间: 2010-4-15 17:55     标题: 回复 7楼 的帖子

这些背景,你不说,谁知道?你顶楼只说一句“但唯一的就是那个很长的开机随机变名的那个进程结束不掉”,进程结束不掉的原因多了去了,谁知道你是因为哪个?
作者: dqwglm    时间: 2010-4-15 18:21

在C盘下会生成2个日志文件,其实一个是白名单就不用看了。。
tasklist.txt这个里面的日志如下。。

Name                                  ProcessId  
System Idle Process                   0         
System                                4         
smss.exe                              696        
csrss.exe                             740        
winlogon.exe                          764        
services.exe                          812        
lsass.exe                             824        
svchost.exe                           988        
svchost.exe                           1040      
svchost.exe                           1312      
svchost.exe                           1356      
RunMe.exe                             1488      
explorer.exe                          1640      
Msg.exe                               1768      
PXDClient.exe                         1780      
svchost.exe                           1800      
internat.exe                          1840      
k8xHrmPPpD4oLlrtVg021CEMufk0iSbQ.exe  1936      
services.exe                          168        
svchost.exe                           1508      
smss.exe                              1408      
wmiprvse.exe                          1484      
notepad.exe                           180        
cmd.exe                               1200      
wmic.exe                              1808      

在这日志里还可以看到这个k8xHrmPPpD4oLlrtVg021CEMufk0iSbQ.exe  1936     
说明那个批处理是可以搜索到这个进程,也能查到这个名子。。但在批处理执行到最后确提示错误找不到进程 。。
作者: hanyeguxing    时间: 2010-4-15 18:43

前提:要结束的进程名中无空格

先用这个看看:20是指进程名最大数,包含.exe这四个字符
  1. @echo off&setlocal enabledelayedexpansion
  2. for /F "tokens=1,2" %%i in ('Tasklist /nh') do (call:hanye "%%i"
  3. if !n! gtr 20 taskkill /f /pid %%j)
  4. exit
  5. :hanye
  6. set "i=%~1"&set n=0
  7. :guxing
  8. if not "!i:~%n%,1!"=="" set/a n+=1&goto:guxing
复制代码
不行再试试这个:20是指进程名最大数,包含.exe这四个字符
  1. @echo off&setlocal enabledelayedexpansion
  2. for /F "tokens=1,2" %%i in ('Tasklist /nh') do (call:hanye "%%i"
  3. if !n! gtr 20 ntsd -c q -p %%j)
  4. exit
  5. :hanye
  6. set "i=%~1"&set n=0
  7. :guxing
  8. if not "!i:~%n%,1!"=="" set/a n+=1&goto:guxing
复制代码

[ 本帖最后由 hanyeguxing 于 2010-4-15 18:46 编辑 ]
作者: dqwglm    时间: 2010-4-15 19:16

'%a' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
2个执行以后都提示了这个。。。
作者: hanyeguxing    时间: 2010-4-15 19:20

原帖由 dqwglm 于 2010-4-15 19:16 发表
'%a' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
2个执行以后都提示了这个。。。

我的两个批处理里没有%a,所以不可能有这个提示。
把你运行的代码贴出来
作者: dqwglm    时间: 2010-4-15 19:25

直接运行以后,CMD就退出了,但看进程还在,所以我就在批处理结尾加了一句。。

pause >nul

不然直接运行了以后,出了什么提示都看不到的。。我加上这句以后提示的就是那个。。
作者: dqwglm    时间: 2010-4-15 19:29

我又看了一下,好像是称加BAT,OEM信息有关系。。。才出的那个提示。。

不是你的语句出错。。但,结果就是,结束不掉那个进程 。。
作者: hanyeguxing    时间: 2010-4-15 19:29

想要暂停,这样写:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /F "tokens=1,2" %%i in ('Tasklist /nh') do (call:hanye "%%i"
  3. if !n! gtr 20 taskkill /f /pid %%j)
  4. pause&exit
  5. :hanye
  6. set "i=%~1"&set n=0
  7. :guxing
  8. if not "!i:~%n%,1!"=="" set/a n+=1&goto:guxing
复制代码

  1. @echo off&setlocal enabledelayedexpansion
  2. for /F "tokens=1,2" %%i in ('Tasklist /nh') do (call:hanye "%%i"
  3. if !n! gtr 20 ntsd -c q -p %%j)
  4. pause&exit
  5. :hanye
  6. set "i=%~1"&set n=0
  7. :guxing
  8. if not "!i:~%n%,1!"=="" set/a n+=1&goto:guxing
复制代码
你再测试下

[ 本帖最后由 hanyeguxing 于 2010-4-15 19:30 编辑 ]
作者: dqwglm    时间: 2010-4-15 19:32

这回好使了,加了那句暂停,进程也结束了。那为什么之前的没加暂时确不结束?

还有就是,不知道你有没有时间和耐心,可以把你写的语句代码,逐句的做个注释解释。。

我不想光拿来就用了。。我想明白其中的含意。。
作者: dqwglm    时间: 2010-4-15 19:39

  1. @echo off&setlocal enabledelayedexpansion
  2. for /F "tokens=1,2" %%i in ('Tasklist /nh') do (call:hanye "%%i"
  3. if !n! gtr 20 taskkill /f /pid %%j)
  4. pause&exit
  5. :hanye
  6. set "i=%~1"&set n=0
  7. :guxing
  8. if not "!i:~%n%,1!"=="" set/a n+=1&goto:guxing
复制代码
错误: 无效语法。'/pid' 需要一个值。
有关用法,请键入 "TASKKILL /?"。
错误: 无效语法。'/pid' 需要一个值。
有关用法,请键入 "TASKKILL /?"。
错误: 无效语法。'/pid' 需要一个值。
有关用法,请键入 "TASKKILL /?"。
成功: 已终止 PID 为 1900 的进程。
作者: lxzzr    时间: 2010-4-15 19:39

进程名是否一定含“_”??
作者: dqwglm    时间: 2010-4-15 19:42

原帖由 lxzzr 于 2010-4-15 19:39 发表
进程名是否一定含“_”??


有的时候是会有“_”我注意过。。
作者: lxzzr    时间: 2010-4-15 20:10     标题: 回复 20楼 的帖子

如果一定有“_”,试下这个:
wmic process where "name like '%[_]%'" call Terminate




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2