我有一个脚本(下面),它查找已安装的Microsoft的当前版本,并将其作为字符串输出。例如,字符串输出为15.0.4771.1000。我不关心超过15的任何东西。我的目标是验证Office的版本是15。我想在第一个. (句号)之前取数字的子字符串,并将它与被质疑的值进行比较。我该怎么做?
下面的脚本甚至与比较值的通配符都不能工作。
Dim oRegistry
Dim oFSO
Dim sKey
Dim sAppExe
Dim sValue
Dim sAppVersion
Const HKEY_LOCAL_MACHINE = &H80000002
Set oRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}//./root/default:StdRegProv")
Set oFSO = CreateObject("Scripting.FileSystemObject")
sKey = "Software\Microsoft\Windows\CurrentVersion\App Paths"
oRegistry.GetStringValue HKEY_LOCAL_MACHINE, sKey & "\" & sAppExe, "", sValue
MsgBox oFSO.GetFileVersion(sValue)
If oFSO.GetFileVersion(sValue)="15.*" Then
WScript.Echo("Office 2013 is installed")
Else
WScript.Echo("You do not have Office 2013 installed")
End If
Set oFSO = Nothing
Set oRegistry = Nothing发布于 2015-12-02 21:13:16
至少有六种方法可以检查字符串的一部分,但是在VBScript中不存在“通配符”。
一种方法是If Left(value, 3) = "15." ...。另一种情况是,版本字符串使用点作为分隔符:If Split(value, ".")(0) = 15 ...。
下面使用Split()并删除WMI;在VBScript中有一种更简单的读取注册表的方法:
Option Explicit
Dim Shell, FSO, path, version
Set Shell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
path = TryRegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\excel.exe\")
If FSO.FileExists(path) Then version = FSO.GetFileVersion(path)
If version = "" Then
WScript.Echo "You do not have Office installed at all"
ElseIf Split(version, ".")(0) = 15 Then
WScript.Echo "You have Office 2013 installed"
Else
WScript.Echo "You have a different version of Office (" + version + ")"
End If
Function TryRegRead(key)
On Error Resume Next
TryRegRead = Shell.RegRead(key)
End Function备注
Option Explicit的习惯Nothing设置东西,这真的不值得Shell.RegRead()返回该键的默认值。HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall的子程序和从那里读取Office版本是一种更安全的查找信息的方法,而不是依赖App从Office包中获取单个可执行文件。发布于 2015-12-02 21:12:34
有几种方法可以做到这一点。例如,您可以拆分点处的字符串,并接受结果数组的第一个字段:
version = oFSO.GetFileVersion(sValue)
majorVersion = Split(version, ".")(0)其他选项是提取包含string函数的第一个点的子字符串:
version = oFSO.GetFileVersion(sValue)
majorVersion = Left(version, InStr(version, "."))或使用正则表达式:
Set re = New RegExp
re.Pattern = "^(\d+)\..*"
version = oFSO.GetFileVersion(sValue)
majorVersion = re.Replace(version, "$1")https://stackoverflow.com/questions/34051999
复制相似问题