[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[注册表类] [已解决]批处理怎样提取已安装软件的资料?

大家好!
       我想编写一个脚本,其功能如下:运行该脚本,脚本从注册表中将操作系统中所安装的所有应用软件收集起来,同时收集主机名、系统安装时间、内存大小、IP地址,并生成一个Excel表格。该表格中分别记录安装应用软件的时间、软件名称、软件所在位置以及主机名、系统安装时间、内存大小、IP地址。
       请各位前辈多多指教,谢谢!

[ 本帖最后由 laotou1000 于 2010-4-2 09:40 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

  1. systeminfo | findstr "主机名.* 初始安装日期.* 物理内存总量.* [1-9].*\.[1-9].*\.[1-9].*\.[1-9]"
复制代码
1

评分人数

TOP

回复 2楼 的帖子

谢谢bat007的帮助!
那么前面的功能如何才能实现呢?(就是收集系统中安装了哪些应用软件的功能)

TOP

1、并不是所有的软件在安装的时候都会向注册表写入信息
2、并不是所有的软件在安装的时候都会向同一个注册表分支写入信息

TOP

回复 4楼 的帖子

那么有什么方法可以实现这种收集方案呢?
有没有什么方法可以将 添加/删除程序 中的软件收集到啊?

TOP

回复 5楼 的帖子

  1. reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /s
复制代码
着手
1

评分人数

TOP

回复 6楼 的帖子

非常感谢您的提示!!!
那么能否帮我看看如何从我的这些资料中提取呢?(我个人对这方面不是很熟)

TOP

RE 7楼

  1. @echo off&setlocal enabledelayedexpansion
  2. (set uninsRoot=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall)
  3. (set _skip=0)
  4. for /f "delims=" %%z in ('reg query !uninsRoot! /s ^| findstr /i "displayname uninstallstring"') do (
  5.   (set _F=%%z)&(set QUSP=!_F!)&(set nameP=!_F!)&(set sp_rjgxP=!_F!)&(set sp_gxP=!_F!)&(set usP=!_F!)
  6.   (set nameP=!nameP:DisplayName=!)&(set usP=!usP:UninstallString=!)&(set QUSP=!QUSP:QuietUninstallString=!)
  7.   (set sp_rjgxP=!sp_rjgxP:软件更新=!)&(set sp_gxP=!sp_gxP:(KB=!)
  8.   
  9.   if "!_F!" neq "!nameP!" (
  10.     (set _skip=0)   
  11.     if "!_F!" neq "!sp_rjgxP!" (set _skip=1)
  12.     if "!_F!" neq "!sp_gxP!" (set _skip=1)
  13.   )
  14.   
  15.   if !_skip! equ 0 if "!_F!" equ "!QUSP!" ( rem 跳过 QuietUninstallString
  16.     (set line=%%z)&(set line=!line:*REG_SZ=!)&(set line=!line:*REG_EXPAND_SZ=!)&(set line=!line:~1!)  
  17.     if "!_F!" neq "!nameP!" (echo.)&echo !line!
  18.     if "!usP!" neq "!_F!" (
  19.       for /f "delims=" %%B in ("!line!") do (
  20.         (set softdir=%%~sdpB)
  21.         if exist !softdir!nul (
  22.           for /f "delims=" %%l in ('dir "%%~dpB" /a-d /s /-c ^| findstr "个文件"') do (
  23.             for /f "tokens=3 delims= " %%a in ("%%l") do (set size=%%a)
  24.           )
  25.           set /a "size=(size+1048576/2)/1048576"
  26.           echo %%~dpB !size!MB %%~tB
  27.         )      
  28.       )
  29.     )
  30.   )
  31. )
  32. pause
复制代码
以上代码可以部分正确的获取应用软件的位置, 大小, 相关时间, 要更完全的解决问题需要对注册表更复杂全面的分析, 甚至其它更好的途径
以下是代码测试输出的部分结果:
360杀毒
C:\Program Files\360\360sd\ 230MB 2009-11-30 下午 19:22

Adobe Flash Player 10 ActiveX
C:\WINDOWS\system32\Macromed\Flash\ 16MB 2010-02-25 下午 22:08

Adobe Flash Player 10 Plugin
C:\WINDOWS\system32\Macromed\Flash\ 16MB 2010-02-17 下午 13:53

AutoIt v3.3.6.0
C:\Program Files\AutoIt3\ 22MB 2010-03-26 下午 15:38

百度Hi
C:\Program Files\baidu\Baidu Hi\ 39MB 2010-02-24 下午 14:12

Conexant HD Audio
C:\Program Files\CONEXANT\CNXT_AUDIO_HDA\ 1MB

HDAUDIO Soft Data Fax Modem with SmartCP
C:\Program Files\CONEXANT\CNXT_MODEM_HDA_HSF\ 1MB

[ 本帖最后由 neorobin 于 2010-3-30 17:36 编辑 ]
1

评分人数

    • laotou1000: 已经将我的需求大部分实现,同时非常感谢帮 ...PB + 3

TOP

回复 8楼 的帖子

非常感谢您的帮助!!!
基本上可以实现我的目的了,正如您说的有些软件只能收集到名称,但是大小、位置却收集不到。
不过这样也能够初步实现我的需求了。
再次感谢您的帮助!!!!

TOP

返回列表