首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从字符串输出中查找子字符串

从字符串输出中查找子字符串
EN

Stack Overflow用户
提问于 2015-12-02 20:05:14
回答 2查看 587关注 0票数 1

我有一个脚本(下面),它查找已安装的Microsoft的当前版本,并将其作为字符串输出。例如,字符串输出为15.0.4771.1000。我不关心超过15的任何东西。我的目标是验证Office的版本是15。我想在第一个. (句号)之前取数字的子字符串,并将它与被质疑的值进行比较。我该怎么做?

下面的脚本甚至与比较值的通配符都不能工作。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-02 21:13:16

至少有六种方法可以检查字符串的一部分,但是在VBScript中不存在“通配符”。

一种方法是If Left(value, 3) = "15." ...。另一种情况是,版本字符串使用点作为分隔符:If Split(value, ".")(0) = 15 ...

下面使用Split()并删除WMI;在VBScript中有一种更简单的读取注册表的方法:

代码语言:javascript
复制
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包中获取单个可执行文件。
票数 2
EN

Stack Overflow用户

发布于 2015-12-02 21:12:34

有几种方法可以做到这一点。例如,您可以拆分点处的字符串,并接受结果数组的第一个字段:

代码语言:javascript
复制
version = oFSO.GetFileVersion(sValue)
majorVersion = Split(version, ".")(0)

其他选项是提取包含string函数的第一个点的子字符串:

代码语言:javascript
复制
version = oFSO.GetFileVersion(sValue)
majorVersion = Left(version, InStr(version, "."))

或使用正则表达式:

代码语言:javascript
复制
Set re = New RegExp
re.Pattern = "^(\d+)\..*"

version = oFSO.GetFileVersion(sValue)
majorVersion = re.Replace(version, "$1")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34051999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档