Board logo

标题: [文本处理] 批处理怎样获取第三方程序输出结果? [打印本页]

作者: 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
  1. @echo off
  2. sc query state= all | findstr "SERVICE_NAME" >%temp%\servName.txt
  3. (for /f "tokens=1*" %%a in (%temp%\servName.txt) do (
  4.     sc qc %%b | findstr "BINARY_PATH_NAME" >%temp%\servPath.txt
  5.     for /f "tokens=2*" %%c in (%temp%\servPath.txt) do (
  6.         echo,%%b "%%~d"
  7.     )
  8. ))>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