标题: [文本处理] 批处理怎样获取第三方程序输出结果? [打印本页]
作者: dnfreeuser 时间: 2011-9-17 16:32 标题: 批处理怎样获取第三方程序输出结果?
目前我有一个控制台程序,运行后输入如下命令,可以显示服务信息
我想问下,有没办法用批处理显示所有服务名称及对应的路径,就是下面红色这两项
其中dir命令支持>输入到外部文件,比如 dir >1.txt
那个程序可以在flover.ys168.com 下 网友点播 找到(fscmd.rar)
简单地说,就是先显示所有服务
reg /system:1
cd controlset001\services
dir >c:\1.txt
然后,如何一个个进这些服务,把需要的信息提取出来呢?
C:\WINDOWS>line 2048
设置屏幕显示行数为:2048
C:\WINDOWS>reg /system:1
文件加载成功,请使用regdir来浏览注册表。
?:\>cd controlset001\services
?:\controlset001\services>dir
2009-11-13 01:15:09 REG_KEY .NET CLR Data
2009-11-13 01:15:09 REG_KEY .NET CLR Networking
2009-11-13 01:15:09 REG_KEY .NET Data Provider for Oracle
2009-11-13 01:15:09 REG_KEY .NET Data Provider for SqlServer
.
.
?:\controlset001\services\wscsvc>dir
2008-11-29 00:27:12 REG_KEY Parameters
2008-11-29 00:27:12 REG_KEY Security
REG_DWORD Type
32
REG_DWORD Start
2
REG_DWORD ErrorControl
1
REG_EXPAND_SZ ImagePath
%SystemRoot%\System32\svchost.exe -k netsvcs
REG_SZ DisplayName
Security Center
REG_MULTI_SZ DependOnService
winmgmt
REG_SZ ObjectName
LocalSystem
REG_SZ Description
监视系统安全设置和配置。
作者: ArdentMan 时间: 2011-9-18 11:16
楼主应描述下要提取的规则,
这样贴个文本上来叫别人如何帮你?
作者: dnfreeuser 时间: 2011-9-18 12:02
回复 2# ArdentMan
下面三句是已有批处理里的
reg /system:1
cd controlset001\services
dir >c:\1.txt
1.txt的内容是像下面这样的,需要每个REG_KEY类型的,cd 后面的项名称如“.NET CLR Data”
2009-11-13 01:15:09 REG_KEY .NET CLR Data
2009-11-13 01:15:09 REG_KEY .NET CLR Networking
2009-11-13 01:15:09 REG_KEY .NET Data Provider for Oracle
2009-11-13 01:15:09 REG_KEY .NET Data Provider for SqlServer
然后,CD以后,再DIR下,会显示
2008-11-29 00:27:12 REG_KEY Parameters
2008-11-29 00:27:12 REG_KEY Security
REG_DWORD Type
32
REG_DWORD Start
2
REG_DWORD ErrorControl
1
REG_EXPAND_SZ ImagePath
%SystemRoot%\System32\svchost.exe -k netsvcs
REG_SZ DisplayName
Security Center
REG_MULTI_SZ DependOnService
现在需要的是提取类型不为REG_KEY的 ImagePath和DisplayName这两个的值
不为REG_KEY的话,其值在第二行的开头的,如上面的值是"%SystemRoot%\System32\svchost.exe -k netsvcs"和“Security Center”这两个
最后一行内输出,如果路径为空的话则不输出,因为有的imagepath可能是不存在的。
服务:Security Center 路径:%SystemRoot%\System32\svchost.exe -k netsvcs
像上面这样,是提取了一行,即“.NET CLR Data“这样一行,如何把所有行都提取出来呢?
作者: Batcher 时间: 2011-9-18 13:17
不需要使用fscmd- @echo off
- sc query state= all | findstr "SERVICE_NAME" >%temp%\servName.txt
- (for /f "tokens=1*" %%a in (%temp%\servName.txt) do (
- sc qc %%b | findstr "BINARY_PATH_NAME" >%temp%\servPath.txt
- for /f "tokens=2*" %%c in (%temp%\servPath.txt) do (
- echo,%%b "%%~d"
- )
- ))>services.txt
复制代码
作者: dnfreeuser 时间: 2011-9-18 20:46
本帖最后由 dnfreeuser 于 2011-9-18 20:52 编辑
回复 4# Batcher
谢谢,不过这个方法有个问题:
当然,上面可以查找服务并获取信息,但是,我提这个问题主要是用来查找rootkit的,即可能的隐藏的注册表项,使用常规命令根本无法发现的
上面这个问题实际上只完成了一半,即查找所有服务,后面还有的是,比较此种方法的结果和常规获取的结果,如果有不同则高亮显示,此最终结果基本上就是隐藏的东东了.
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |