这段时间,因为要在 win 上查询系统不少相关信息,用到 wmic 。
然后,就可以通过关键字在输出的所有文本文件中搜索 -- 文本文件中包含了 别名所有的字段和输出信息。
决定用 C 实现输出所有别名 list full 的功能,需要将 所有 别名写成
以下是处理方式:
但是有时候要查找一条信息,我并不清楚要去 wmic 的哪一个别名查找,
但根据相关别名使用 list full, 再去查找信息则太麻烦。
然后,就可以通过关键字在输出的所有文本文件中搜索 -- 文本文件中包含了 别名所有的字段和输出信息。
决定用 C 实现输出所有别名 list full 的功能,需要将 所有 别名写成
"alias_1",的形式,如果一条一条从 "wmic /?" 的输出去拷贝无疑是很麻烦的。
"alias_2",
...
"alias_n",
NULL
以下是处理方式:
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++ 的"文件查找"功能, 在所有的输出文件中查找关键字.