现在的位置: 首页 > 综合 > 正文

输出所有 wmic 的 list full, 用关键字搜索结果

2013年08月27日 ⁄ 综合 ⁄ 共 2122字 ⁄ 字号 评论关闭

这段时间,因为要在 win 上查询系统不少相关信息,用到 wmic 。

但是有时候要查找一条信息,我并不清楚要去 wmic 的哪一个别名查找,
但根据相关别名使用 list full, 再去查找信息则太麻烦。

因此,我想到,可以先把每一条别名都 list full, 把输出重定向到相应文本文件中
然后,就可以通过关键字在输出的所有文本文件中搜索 -- 文本文件中包含了 别名所有的字段和输出信息。

决定用 C 实现输出所有别名 list full 的功能,需要将 所有 别名写成

"alias_1",
"alias_2",
...
"alias_n",
NULL

的形式,如果一条一条从 "wmic /?" 的输出去拷贝无疑是很麻烦的。

以下是处理方式:

1) 运行 "wmic /? | find "-" > "e:\temp\temp"
2) 删除 temp 中 前后几行不是 别名相关的信息
3) 用 notepad++ 打开 temp,发现有不少空行。选择"视图"-"显示符号"-"显示所有字符",显示如下
alias_1 - 说明 \r
\r\n
alias_2...
...
打开"替换"对话框,"查找模式"选择为"扩展"。将  \r\n 全部替换为空, 空行去除掉。
4) 选择查找模式为"正则表达式", 将  [^A-Z].*$  替换为 ", 将   ^  替换为 ", 此时, temp文件显示如下
"alias_1",
"alias_2",

...

然后根据别名数组执行 " wmic alias_n list full > e:\temp\wmic_list_full\alias_n.txt", 以下为程序的实现:

/*
 * author: xiaomu
 * date: 2012/03/20
 */


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define LEN 1024

static char *menu[] = 
{
	"BASEBOARD",
	"BIOS",
	"BOOTCONFIG",
	"CDROM",
	"COMPUTERSYSTEM",
	"CPU",
	"CSPRODUCT",
	"DATAFILE",	
	"DCOMAPP",
	"DESKTOP",
	"DESKTOPMONITOR",
	"DEVICEMEMORYADDRESS",
	"DISKDRIVE",
	"DISKQUOTA",
	"DMACHANNEL",
	"ENVIRONMENT",
	"FSDIR",
	"GROUP",
	"IDECONTROLLER",
	"IRQ",
	"JOB",
	"LOADORDER",
	"LOGICALDISK",
	"LOGON",
	"MEMCACHE",
	"MEMLOGICAL",
	"MEMPHYSICAL",
	"NETCLIENT",
	"NETLOGIN",
	"NETPROTOCOL",
	"NETUSE",
	"NIC",
	"NICCONFIG",
	"NTDOMAIN",
	"NTEVENT",
	"NTEVENTLOG",
	"ONBOARDDEVICE",
	"OS",
	"PAGEFILE",
	"PAGEFILESET",
	"PARTITION",
	"PORT",
	"PORTCONNECTOR",
	"PRINTER",
	"PRINTERCONFIG",
	"PRINTJOB",
	"PROCESS",
	"PRODUCT",
	"QFE",
	"QUOTASETTING",
	"RECOVEROS",
	"REGISTRY",
	"SCSICONTROLLER",
	"SERVER",
	"SERVICE",
	"SHARE",
	"SOFTWAREELEMENT",
	"SOFTWAREFEATURE",
	"SOUNDDEV",
	"STARTUP",
	"SYSACCOUNT",
	"SYSDRIVER",
	"SYSTEMENCLOSURE",
	"SYSTEMSLOT",
	"TAPEDRIVE",
	"TEMPERATURE",
	"TIMEZONE",
	"UPS",
	"USERACCOUNT",
	"VOLTAGE",
	"VOLUMEQUOTASETTING",
	"WMISET",
	NULL
};

int wmic_list_full();

int main()
{
	wmic_list_full();
	return 0;
}

int wmic_list_full()
{
	char **ptr;
	char buf[LEN];

	ptr = menu;
	while( *ptr != NULL)
	{
		memset(buf, 0, LEN);
		sprintf(buf, "wmic %s list full > e:\\temp\\wmic_list_full\\%s.txt", *ptr, *ptr);
		printf("%s --- done\n", buf);
		*ptr ++;
		system(buf);
	}

	return 0;
}


int wmic_get_help()
{
	char **ptr;
	char buf[LEN];

	ptr = menu;
	while( *ptr != NULL)
	{
		memset(buf, 0, LEN);
		sprintf(buf, "wmic %s get /?> e:\\temp\\wmic_get_help\\%s.txt", *ptr, *ptr);
		printf("%s --- done\n", buf);
		*ptr ++;
		system(buf);
	}

	return 0;
}	

现在可以用 notepad++ 的"文件查找"功能, 在所有的输出文件中查找关键字.

抱歉!评论已关闭.