这段时间,因为要在 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++ 的"文件查找"功能, 在所有的输出文件中查找关键字.