批处理获取系统信息

批处理获取系统信息

批处理获取系统信息,我们通常使用 WMIC(WMI 命令行,Windows Management Instrumentation,Windows管理规范)来实现。

WMIC 支持 Windows XP 及更高版本,因此在正常桌面系统环境基本都可以使用。但部分 WMIC 的命令参数在 Windows XP 中不支持,需要手动通过 PATH 参数指定。因此建议在 Windows XP 环境下编写脚本以获得最佳兼容性。

另外需要注意的是,在 WinPE 环境下可能没有 WMIC,或者存在组件不完整、无法使用的问题。因此,对于这种情况,除了补全 WinPE 的 WMIC 组件外,还可以使用其他方法,如 Nwinfo、AIDA64 等获取系统信息。

本文介绍使用 WMIC 获取系统信息的方法,经过测试能够在 Windows XP 环境下正确读取系统信息,如果需要扩展其它功能,请自行研究 WMIC 文档

获取原理

通过使用 CMD 自带的 FOR /F 命令,调用 WMIC 命令获取系统信息,并将其从 WMIC 输出结构中解析出来,保存到变量。

需要注意的是,由于我们要在代码块中设置变量,所以需要使用 setlocal enabledelayedexpansion 命令。

另外获取的容量单位为字节(Byte),且大小无法通过 CMD 直接转换到GB(超过int32),需要借助其它脚本语言,如 PowerShell、Python 等。

获取网络信息

通过 curl 命令连接 Cloudflare 中国网络节点获取网络信息

1
2
3
4
5
for /f "tokens=1,2 delims==" %%a in ('curl.exe -4 "http://cf-ns.com/cdn-cgi/trace"') do (
for %%i in (ip,loc) do (
if /i "%%a" == "%%i" set "%%i=%%b"
)
)

可用参数如下

1
2
3
ip=66.666.66.66    // 连接IP
colo=KMG // CDN节点,如KMG(昆明长水机场)
loc=CN // 国家

获取系统UUID

1
2
3
4
5
for /f "tokens=1,2 delims==" %%a in ('WMIC CSPRODUCT GET UUID /value') do (
for %%i in (UUID) do (
if /i "%%a" == "%%i" set "CSPRODUCT_%%i=%%b"
)
)

获取系统版本

1
2
3
for /f "tokens=2 delims=[]" %%a in ('ver') do (
for %%i in (%%a) do set "OS_Ver=%%i"
)

获取系统描述、系统架构、总内存

1
2
3
4
5
for /f "tokens=1,2 delims==" %%a in ('WMIC OS GET /value') do (
for %%i in (Caption,OSArchitecture,TotalVisibleMemorySize) do (
if /i "%%a" == "%%i" set "OS_%%i=%%b"
)
)

获取电脑厂家、型号

1
2
3
4
5
for /f "tokens=1,2 delims==" %%a in ('WMIC BASEBOARD GET /value') do (
for %%i in (Manufacturer,Product) do (
if /i "%%a" == "%%i" set "BASEBOARD_%%i=%%b"
)
)

获取CPU型号、CPUID

1
2
3
4
5
for /f "tokens=1,2 delims==" %%a in ('WMIC CPU GET /value') do (
for %%i in (Caption,Name) do (
if /i "%%a" == "%%i" set "CPU_%%i=%%b"
)
)

获取GPU驱动版本、分辨率、名称、设备ID

1
2
3
4
5
6
7
8
9
10
11
for /f "tokens=1,2 delims==" %%a in ('WMIC PATH Win32_VideoController GET /value') do (
for %%i in (DriverVersion,VideoModeDescription,VideoProcessor,PNPDeviceID) do (
if /i "%%a" == "%%i" (
if defined Win32_VideoController_%%i (
set "Win32_VideoController_%%i=!Win32_VideoController_%%i!,%%b"
) else (
set "Win32_VideoController_%%i=%%b"
)
)
)
)

获取网卡名称、MAC地址

1
2
3
4
5
6
7
8
9
10
11
for /f "tokens=1,2 delims==" %%a in ('WMIC NIC WHERE "PhysicalAdapter=TRUE" GET /value') do (
for %%i in (Name,MACAddress) do (
if /i "%%a" == "%%i" (
if defined NIC_%%i (
set "NIC_%%i=!NIC_%%i!,%%b"
) else (
set "NIC_%%i=%%b"
)
)
)
)

获取磁盘名称、大小

1
2
3
4
5
6
7
8
9
10
11
for /f "tokens=1,2 delims==" %%a in ('WMIC DISKDRIVE GET /value') do (
for %%i in (Caption,Size) do (
if /i "%%a" == "%%i" (
if defined DISKDRIVE_%%i (
set "DISKDRIVE_%%i=!DISKDRIVE_%%i!,%%b"
) else (
set "DISKDRIVE_%%i=%%b"
)
)
)
)