Board logo

标题: 批处理只结束相同进程中的一个 [打印本页]

作者: abczxc     时间: 2007-4-30 10:39    标题: 批处理只结束相同进程中的一个

@echo off
for /f "tokens=1,2" %%i in ('tasklist') do (
    echo %%i | findstr /i "notepad.exe" 1>nul 2>nul && (
        ntsd -c q -p %%j & set qq=%%i
    )
)
if /i not "%qq%"=="notepad.exe" echo ~~~~~~没看到该程序~~~~~~~
echo.
pause

notepad.exe 只是一个例子
现在的情况是C:\WINDOWS\system32\svchost.exe是正常的程序,
但也有个      C:\WINDOWS\\svchost.exe坏程序
很显然上面的代码不行了,谁能给一个能只结束相同进程中一个的
批处理我,脚本也行

[ Last edited by abczxc on 2008-4-25 at 04:38 PM ]
作者: lxmxn     时间: 2007-4-30 10:52
直接根据路径杀掉不就可以了吗?
搜索 wmic 。
作者: bingxiao20     时间: 2007-4-30 10:56
根据PID进程号查杀应该好点吧 也简单点
作者: youxi01     时间: 2007-4-30 11:07


  Quote:
Originally posted by bingxiao20 at 2007-4-30 10:56 AM:
根据PID进程号查杀应该好点吧 也简单点

应该做不到:如何去判断 坏程序的PID号?
还是斑竹的办法好点,用WMIC取得该程序的路径,如何不符合设定,就干掉它
作者: baomaboy     时间: 2007-4-30 11:11

Dim WshSHell
Set WshSHell = WScript.CreateObject("WScript.Shell")
for each ps in getobject("winmgmts:\\.\root\cimv2:win32_process").instances_
if ps.executablepath="C:\WINDOWS\svchost.exe" then
WshSHell.Run ("ntsd -c q -p "&ps.handle),vbHide
end if
next
Set WshSHell = Nothing
WScript.Quit(0)

作者: bingxiao20     时间: 2007-4-30 11:53


  Quote:
Originally posted by baomaboy at 2007-4-29 10:11 PM:
[code]
Dim WshSHell
Set WshSHell = WScript.CreateObject("WScript.Shell")
for each ps in getobject("winmgmts:\\.\root\cimv2:win32_process").instances_
if ps.executablepath=&q ...

这个倒是可以用来杀掉那些病毒李鬼进程了。。。
作者: youxi01     时间: 2007-4-30 12:52


  Quote:
Originally posted by baomaboy at 2007-4-30 11:11 AM:
[code]
Dim WshSHell
Set WshSHell = WScript.CreateObject("WScript.Shell")
for each ps in getobject("winmgmts:\\.\root\cimv2:win32_process").instances_
if ps.executablepath=&q ...

发现兄写了好多的vbs代码,都写的不错啊!但是结构看起来不是很明确,我不知道你是不是专门用了软件来编写 vbs 的,如果是这样那就另当别论。

想我开始学的时候,都是用NOTEPAD直接来的,现在想来头都大。
作者: baomaboy     时间: 2007-4-30 13:24


  Quote:
Originally posted by youxi01 at 2007-4-30 12:52:


发现兄写了好多的vbs代码,都写的不错啊!但是结构看起来不是很明确,我不知道你是不是专门用了软件来编写 vbs 的,如果是这样那就另当别论。

想我开始学的时候,都是用NOTEPAD直接来的,现在想来头都大。

最初我也用N的,后来一直只用是EmEditor了。

呵呵 没用过专门的软件呢还,如果用了也许结构不至于那么差了,写一个东西我总是是想到哪写到哪,所以有时为了个忽然想到的功能块或错误处理而随意改变程序的结构。另外我在 管理”新建“菜单中的文件类型→VBS版 9楼中 说:

  Quote:
①由于新建VBS模版的原因,代码中会有多于的代码 (无用代码),更由于我懒而没删除,大家凑合看吧。
②基础差,没好的编码习惯,想到那写到哪,所以可能有捷径的代码我用了很曲折的方法,还是由于懒没有改写。
我的目的就是,可以学习到方法和技巧,并可以使用,至于美化格式,精简代码,等我有时间和精力时也许会那么做 。所以 希望大家不要扔鸡蛋啊 ,最初加密就是怕大家砸我 ^_^。


作者: abczxc     时间: 2007-4-30 21:25
Dim WshSHell
Set WshSHell = WScript.CreateObject("WScript.Shell")
for each ps in getobject("winmgmts:\\.\root\cimv2:win32_process").instances_
if ps.executablepath="C:\WINDOWS\system32\syx\syy\syz\sss\s.exe" then
WshSHell.Run ("ntsd -c q -p "&ps.handle),vbHide
end if
next
Set WshSHell = Nothing
WScript.Quit(0)
楼上的vbs真不错,但是我电脑上面有些程序用这个结束不了啊
如 C:\WINDOWS\system32\syx\syy\syz\sss\s.exe 这个程序就结束不了,这是怎么回事?
作者: abczxc     时间: 2007-4-30 21:37
还是搞清楚了,baomaboy写的这个脚本真好。谢谢啊
原来是路径搞错了,用mt -pslist看了一下好了
作者: abczxc     时间: 2007-5-1 18:10
有不有同样功能的bat呀

wmic是怎么,谁举个例子吧
作者: baomaboy     时间: 2007-5-2 21:14
To abczxc
帖子的问题直接回原贴就可以了,UCase函数与组合次数无关。
Dim WshSHell
Set WshSHell = WScript.CreateObject("WScript.Shell")
for each ps in getobject("winmgmts:\\.\root\cimv2:win32_process").instances_
if UCase(ps.executablepath)=UCase("C:\WINDOWS\svchost.exe") then
WshSHell.Run ("ntsd -c q -p "&ps.handle),vbHide
end if
next
Set WshSHell = Nothing
WScript.Quit(0)

作者: baomaboy     时间: 2007-5-2 21:21
这个例子是带删除文件的 搜索路径查杀进程