标题: [注册表类] [已解决]批处理怎样提取已安装软件的资料? [打印本页]
作者: laotou1000 时间: 2010-3-22 11:12 标题: [已解决]批处理怎样提取已安装软件的资料?
大家好!
我想编写一个脚本,其功能如下:运行该脚本,脚本从注册表中将操作系统中所安装的所有应用软件收集起来,同时收集主机名、系统安装时间、内存大小、IP地址,并生成一个Excel表格。该表格中分别记录安装应用软件的时间、软件名称、软件所在位置以及主机名、系统安装时间、内存大小、IP地址。
请各位前辈多多指教,谢谢!
[ 本帖最后由 laotou1000 于 2010-4-2 09:40 编辑 ]
作者: bat007 时间: 2010-3-22 20:50
- systeminfo | findstr "主机名.* 初始安装日期.* 物理内存总量.* [1-9].*\.[1-9].*\.[1-9].*\.[1-9]"
复制代码
作者: laotou1000 时间: 2010-3-25 18:24 标题: 回复 2楼 的帖子
谢谢bat007的帮助!
那么前面的功能如何才能实现呢?(就是收集系统中安装了哪些应用软件的功能)
作者: bat007 时间: 2010-3-25 23:32
1、并不是所有的软件在安装的时候都会向注册表写入信息
2、并不是所有的软件在安装的时候都会向同一个注册表分支写入信息
作者: laotou1000 时间: 2010-3-29 10:41 标题: 回复 4楼 的帖子
那么有什么方法可以实现这种收集方案呢?
有没有什么方法可以将 添加/删除程序 中的软件收集到啊?
作者: neorobin 时间: 2010-3-29 12:00 标题: 回复 5楼 的帖子
从- reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /s
复制代码
着手
作者: laotou1000 时间: 2010-3-30 09:57 标题: 回复 6楼 的帖子
非常感谢您的提示!!!
那么能否帮我看看如何从我的这些资料中提取呢?(我个人对这方面不是很熟)
作者: neorobin 时间: 2010-3-30 16:48 标题: RE 7楼
- @echo off&setlocal enabledelayedexpansion
- (set uninsRoot=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall)
- (set _skip=0)
- for /f "delims=" %%z in ('reg query !uninsRoot! /s ^| findstr /i "displayname uninstallstring"') do (
- (set _F=%%z)&(set QUSP=!_F!)&(set nameP=!_F!)&(set sp_rjgxP=!_F!)&(set sp_gxP=!_F!)&(set usP=!_F!)
- (set nameP=!nameP:DisplayName=!)&(set usP=!usP:UninstallString=!)&(set QUSP=!QUSP:QuietUninstallString=!)
- (set sp_rjgxP=!sp_rjgxP:软件更新=!)&(set sp_gxP=!sp_gxP:(KB=!)
-
- if "!_F!" neq "!nameP!" (
- (set _skip=0)
- if "!_F!" neq "!sp_rjgxP!" (set _skip=1)
- if "!_F!" neq "!sp_gxP!" (set _skip=1)
- )
-
- if !_skip! equ 0 if "!_F!" equ "!QUSP!" ( rem 跳过 QuietUninstallString
- (set line=%%z)&(set line=!line:*REG_SZ=!)&(set line=!line:*REG_EXPAND_SZ=!)&(set line=!line:~1!)
- if "!_F!" neq "!nameP!" (echo.)&echo !line!
-
- if "!usP!" neq "!_F!" (
- for /f "delims=" %%B in ("!line!") do (
- (set softdir=%%~sdpB)
- if exist !softdir!nul (
- for /f "delims=" %%l in ('dir "%%~dpB" /a-d /s /-c ^| findstr "个文件"') do (
- for /f "tokens=3 delims= " %%a in ("%%l") do (set size=%%a)
- )
- set /a "size=(size+1048576/2)/1048576"
- echo %%~dpB !size!MB %%~tB
- )
- )
- )
- )
- )
- 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 编辑 ]
作者: laotou1000 时间: 2010-4-2 09:37 标题: 回复 8楼 的帖子
非常感谢您的帮助!!!
基本上可以实现我的目的了,正如您说的有些软件只能收集到名称,但是大小、位置却收集不到。
不过这样也能够初步实现我的需求了。
再次感谢您的帮助!!!!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |