0

我需要检索操作系统名称,例如“Windows 2003”,然后是操作系统版本,即“服务器标准版”。

我有这个脚本

Set colItems = objWMISrvc.ExecQuery("SELECT * FROM Win32_OperatingSystem"
For Each objOperatingSystem in colItems
   strOSName = objOperatingSystem.Caption
Next

这使得 strOSName 成为“Windows 2003 Server Standard Edition”或在我正在开发的“Microsoft Windows 7 Professional”系统上。

有没有办法让我把这两个方面分开?如果这有意义...

4

1 回答 1

2

由于市场营销在版本控制方面有发言权,我怀疑您能否找到适用于所有 Windows 版本的普遍适用的策略。对于给出的示例,我将从 RegExp 开始:

Option Explicit

Function qq(s) : qq = """" & s & """" : End Function

Dim aVers : aVers = Array( _
    "Windows 2003 Server Standard Edition" _
  , "Microsoft Windows 7 Professional" _
)
Dim reVers : Set reVers = New RegExp
reVers.Pattern = "^(\D+\d+) (.*)$"
Dim sVers
For Each sVers In aVers
    Dim oMTS : Set oMTS = reVers.Execute(sVers)
    WScript.Echo Join(Array( _
       qq(sVers), qq(oMTS(0).SubMatches(0)), qq(oMTS(0).SubMatches(1)) _
    ), vbCrLf)
Next

输出:

"Windows 2003 Server Standard Edition"
"Windows 2003"
"Server Standard Edition"
"Microsoft Windows 7 Professional"
"Microsoft Windows 7"
"Professional"

为了应对例如“Microsoft Windows XP [版本 5.1.2600]”,您将不得不修改模式(但自定义 RegExp 模式比修改包含大量 InStr() 和 Mid() 调用的函数更好)。

添加/cf。评论)

模式 "^(\D+\d+) (.*)$" 寻找:

  1. ^ 字符串开头
  2. (开始第一次捕获/组
  3. \D+ 序列(1 个或多个)非数字
  4. \d+ 数字序列
  5. ) 结束第一次捕获/组
  6. <——看!一片空白!
  7. (开始第二次捕获/组
  8. .*(可能为空)字符序列,除了 vbLf
  9. ) 结束第二次捕获/组
  10. $ 字符串结尾
于 2012-11-01T14:22:15.140 回答