Board logo

标题: [系统相关] 批处理怎样判断操作系统的类型? [打印本页]

作者: BatCoder    时间: 2010-9-7 21:26     标题: 批处理怎样判断操作系统的类型?

要求能够判断以下系统:
Win2000
WinXP
Win2003
Vista
Win2008
Win7
作者: TX_kakashi    时间: 2010-9-7 22:10

ver便可
如果要补丁信息的话要读注册表了
作者: BatCoder    时间: 2010-9-7 23:19

原帖由 TX_kakashi 于 2010-9-7 22:10 发表
ver便可
如果要补丁信息的话要读注册表了

遗憾的是,ver不可以,你找几个不同的系统试试就知道了。
作者: terse    时间: 2010-9-8 02:08

下面两个做到不  
net config work

systeminfo
作者: hfg1977    时间: 2010-9-8 02:34

先给出个简单的:
  1. ::================= 判断Windows版本 ============================
  2. ::返回值: isXPlevel=1 XP级别;isXPlevel=2 高于XP级别;isXPlevel=0 低于XP级别
  3. :isWindowsVer
  4. ver|findstr "5\.[0-9]\.[0-9][0-9]*">nul&&(set isXPlevel=1&goto:eof)
  5. ver|findstr "6\.[0-9]\.[0-9][0-9]*">nul&&(set isXPlevel=2&goto:eof)
  6. set isXPlevel=0
  7. goto:eof
复制代码

作者: hfg1977    时间: 2010-9-8 02:48

再说一下复杂的:
WindowsOS dwPlatformID dwMajorVersion dwMinorVersion dwBuildNumber
95                 1         4                 0                 950
95 SP1                 1         4                 0                 > 950 && <= 1080
95 OSR2         1         4                 < 10                 > 1080
98                 1         4                 10                 1998
98 SP1                 1         4                 10                 >1998 && < 2183
98 SE                 1         4                 10                 >= 2183
ME                 1         4                 90                 3000
NT 3.51         2         3                 51                 1057
NT 4                 2         4                 0                 1381
2000                 2         5                 0                 2195
XP                 2         5                 1                 2600
2003                 2         5                 2                 3790
Vista                 2         6                 0                 6000
Vista SP1/2008        2         6                 0                 6001
CE 1.0                 3         1                 0  
CE 2.0                 3         2                 0
CE 2.1                3         2                 1
CE 3.0                3         3                 0

    'Windows 7              6.1      wProductType == VER_NT_WORKSTATION = 1
    'Windows Server 2008 R2 6.1      wProductType != VER_NT_WORKSTATION
    'Windows Server 2008    6.0      wProductType != VER_NT_WORKSTATION
    'Windows Vista 6.0      6 0      wProductType == VER_NT_WORKSTATION
    'Windows Server 2003 R2 5.2     GetSystemMetrics(SM_SERVERR2) != 0
    'Windows Server 2003    5.2     GetSystemMetrics(SM_SERVERR2) == 0
    'dwPlatformId:
    'VER_PLATFORM_WIN32s         =0   Win32s on Windows 3.1.
    'VER_PLATFORM_WIN32_WINDOWS  =1   Win32 on Windows 95.
    'VER_PLATFORM_WIN32_NT       =2   Win32 on Windows NT.
    'VER_NT_WORKSTATION          =1
    'VER_NT_DOMAIN_CONTROLLER    =2
    'VER_NT_SERVER               =3


由上表我们可以看出 VER 命令可以直接判断OS有:
Win2000     /5 .0   可以直接判断
WinXP         /5 .1   可以直接判断
Win2003     /5 .2  可以直接判断

Vista            /6.0   不能直接判断
'Windows Server 2008       6.0          不能直接判断
Windows Server 2008 R2 6.1      不能直接判断
Win7                                      6.1      不能直接判断
作者: hfg1977    时间: 2010-9-8 02:57

Vista                 2         6                 0                 6000
Vista SP1/2008        2         6                 0                 6001

这里可以看到 Vista SP1和2008   的版本号与BuildNumber 完全一样,所以无法用VER命令分别; 但是非sp版本的Vista还是可以判断的.

汗,我只用过XP, 希望有人补充下 各OS BuildNumber  !!!!!!!!!!!
作者: ryanliue    时间: 2010-9-8 11:57

Ver、注册表、WMI……方法有好多种。
作者: cjiabing    时间: 2010-9-8 12:51

C:\>for /f "skip=4 tokens=2 delims==/" %a in   (c:\boot.ini) do echo %a&pause
作者: BatCoder    时间: 2010-9-8 15:01

原帖由 ryanliue 于 2010-9-8 11:57 发表
Ver、注册表、WMI……方法有好多种。

你用哪种方法实现的?能否学习一下你的代码?
作者: BatCoder    时间: 2010-9-8 15:02

原帖由 cjiabing 于 2010-9-8 12:51 发表
C:\>for /f "skip=4 tokens=2 delims==/" %a in   (c:\boot.ini) do echo %a&pause

你没有用过Vista或者Win7系统吧?
作者: Batcher    时间: 2010-9-8 22:24

XP SP3: Microsoft Windows XP [Version 5.1.2600]
Win2003 SP2: Microsoft Windows [Version 5.2.3790]
Win2003 R2 SP2: Microsoft Windows [Version 5.2.3790]
Vista SP2: Microsoft Windows [Version 6.0.6002]
Win7: Microsoft Windows [Version 6.1.7600]
作者: hfg1977    时间: 2010-9-9 00:51

谢谢 Batcher 版主 分享OS BuildNumber .
收藏了!
作者: canyuexiaolang    时间: 2010-9-9 08:06

如果大家知道的话,打开cmd可以看到
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

每个版本的"[版本 5.1.2600]"都不一样

可以获取,然后再判断

由于我家只有win2003和XP,win2000,98,Win7,Win2008都没有
就不写代码了....汗
作者: netbenton    时间: 2010-9-9 13:22

  1. @echo off
  2. ver >"%temp%\aaa.tmp"
  3. findstr /l /g:"%temp%\aaa.tmp" "%0">"%temp%\aaa.bat"
  4. call "%temp%\aaa.bat"
  5. echo 当前系统是:%oss%
  6. pause
  7. goto :end
  8. 在这里定义好数据:
  9. set oss=win xp3 & echo XP SP3: Microsoft Windows XP [Version 5.1.2600]
  10. set oss=win2003 sp2 & echo Win2003 SP2: Microsoft Windows [Version 5.2.3790]
  11. set oss=Win2003 R2 SP2& echo Win2003 R2 SP2: Microsoft Windows [Version 5.2.3790]
  12. set oss=win Vista SP2 & echo Vista SP2: Microsoft Windows [Version 6.0.6002]
  13. set oss=win7 & echo Win7: Microsoft Windows [Version 6.1.7600]
  14. set oss=win xp3 & echo XP SP3: Microsoft Windows XP [版本 5.1.2600]
  15. :end
复制代码

作者: cjiabing    时间: 2010-9-9 16:39

原帖由 BatCoder 于 2010-9-8 15:02 发表

你没有用过Vista或者Win7系统吧?

————
呵呵,不好意思,钟情于XP,没用过那么先进的!~
作者: lxxx    时间: 2015-7-4 10:45

感觉6楼的代码较实用简洁。
作者: /zhqsystem/zhq    时间: 2015-7-5 23:18

我只能提供win7正式版版本号,   6.1.7600.16385  和  6.1.7601.17514




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2