0%

windows bat脚本判断当前操作系统的方法

目标

获取当前操作系统的版本和架构,如win7 x64、server2008 x64等

命令行工具

WMIC

通过命令行工具WMIC可以获取当前系统的详细信息,但是需要使用管理员权限执行

  1. 获取当前操作系统的版本:
1
2
3
>> wmic os get version
Version
6.1.7601

此版本号可通过查表获取对应的操作系统版本

客户端系统名称 版本
Windows Vista SP2 6.0.6002
Windows 7 6.1.7600
Windows 7 SP1 6.1.7601
Windows 8 RTM 6.2.9200.16384
Windows 10 Gold 10.0.10240
服务器系统名称 版本
Server 2008 6.0.6001
Server 2008 R2 RTM 6.1.7600
Server 2012 6.2.9200
Server 2012 R2 6.3.9600
Server 2016 RTM 2016-09-26 10.0.14393
详细信息表格可以参阅ver

  1. 获取系统架构(x86 or x64)

    1
    2
    >>wmic os get osarchitecture /format:list
    OSArchitecture=64-bit

    可以通过/format:list格式化输入;这里可能在某些系统语言为中文的情况下,输出结果为64 位,当分割字符提取64的时候需要考虑加入空格的分割符。

  2. 判断是客户端系统还是服务器端
    通过version获取的信息可能无法分辨是win7SP1还是Server2008R2,通过构建版本号来区分不是很可靠,我就遇到Server2008R2获取的version为6.1.7601。

1
2
3
4
5
6
7
rem check server or client system
wmic os get caption /format:list | find "Server"
if errorlevel 1 (
set IS_SERVER=0
) else (
set IS_SERVER=1
)

判断对应操作系统

通过以上获取的信息查表,可以通过判断得到当前的系统信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
rem get os version and architecture info (分隔符为=,-, ,共三个)
for /f "tokens=2 delims==- " %%a in ('wmic os get osarchitecture /format:list') do (
set OS_ARCH=%%a
)
for /f "tokens=2,3,4 delims==." %%a in ('wmic os get version /format:list') do (
set OS_MAJOR=%%a
set OS_MINOR=%%b
set OS_BUILD=%%c
)

if %OS_MAJOR% equ 6 (
rem 6.0 winVista or server2008
if %OS_MINOR% equ 0 (
if %IS_SERVER% equ 1 (
if %OS_ARCH% equ 64 (
rem Server 2008 x64
) else (
rem Server 2008 x32
)
) else (
if %OS_ARCH% equ 64 (
rem Win vista x64
) else (
rem Win vista x32
)
)
)

rem 6.2 win8 or server2012
if %OS_MINOR% equ 2 (
if %IS_SERVER% equ 1 (
if %OS_ARCH% equ 64 (
rem Server 2012 x64
) else (
rem Server 2012 x32
)
) else (
if %OS_ARCH% equ 64 (
rem Win8 x64
) else (
rem Win8 x32
)
)
)

rem 6.3 win8.1 or server2012R2
if %OS_MINOR% equ 3 (
if %IS_SERVER% equ 1 (
if %OS_ARCH% equ 64 (
rem Server 2012R2 x64
) else (
rem Server 2012R2 x32
)
) else (
if %OS_ARCH% equ 64 (
rem Win8.1 x64
) else (
rem Win8.1 x32
)
)
)

rem 6.1 win7 or server2008R2
if %OS_MINOR% equ 1 (
if %IS_SERVER% equ 1 (
if %OS_ARCH% equ 64 (
rem Server 2008R2 x64
) else (
rem Server 2008R2 x32
)
) else (
if %OS_ARCH% equ 64 (
rem Win7sp1 x64
) else (
rem Win7sp1 x32
)
)
)
)
------------ 本文已结束,感谢您的阅读,欢迎留言讨论 ------------