如何在Vbscript的Exists方法字典中使用值项而不是键进行搜索?

问题描述

Dim d   ' Create a variable.
Set d = CreateObject("Scripting.Dictionary")
d.Add "a","Athens"   ' Add some keys and items.
d.Add "b","Belgrade"
d.Add "c","Cairo"

问题: 我可以编写逻辑来检查键d.Exists("Cario")的{​​{1}}值是否为int ??

解决方法

Items方法可帮助我们获取存储在数据字典对象的键值对中的值。

object.Items( )


Option Explicit
Dim d,Capital,i,Capital2Search
Set d = CreateObject("Scripting.Dictionary")
d.Add "a","Athens"   ' Add some keys and items.
d.Add "b","Belgrade"
d.Add "c","Cairo"

'Items Method helps us to get the values stored in the key value pair of the data dictionary object.
'object.Items( )

Capital = d.items

For i=LBound(Capital) to UBound(Capital)
    wscript.echo Capital(i)
Next

'Searching for Cairo
Capital2Search = "Cairo"

For i=LBound(Capital) to UBound(Capital)
    If Instr(UCASE(Capital(i)),UCASE(Capital2Search)) > 0 Then
        wscript.echo Capital2Search & " Exists ! " 
    End If
Next

编辑:13/08/2020 @ 18:00

请参阅您的最后一条评论:您可以执行以下操作:


Option Explicit
Dim Title : Title = "Find a Service by Name"
Dim Dico,objWMIService,colListOfServices,objService,Keys,ServiceName,Service2Search
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery("SELECT * FROM Win32_Service")
Set Dico = CreateObject("Scripting.Dictionary")
' We fill our Dictionary in this loop For ... Next
For Each objService in colListOfServices
    If Not dico.Exists(objService.Name) Then
        Dico.Add objService.Name,objService.PathName
    End If
Next

Service2Search = "Bits"
Keys = Dico.Keys

' Looking for a service name = "BITS" in this example :
For each ServiceName in Keys
    If Instr(UCASE(ServiceName),UCASE(Service2Search)) > 0 Then
        MsgBox "The service "& ServiceName & " : Exists !" & vbcrlf &_
        "PahName : " & dico(ServiceName),vbInformation,Title
        'Exit For
    End If
Next

编辑:13/08/2020 @ 19:30

如果要搜索一系列服务:

Option Explicit
Dim Title : Title = "Find a Service by Name into an Array"
Dim Dico,Keys
Dim ServiceName,Services,ArrService2Search,Service2Search,PathName
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery("SELECT * FROM Win32_Service")
Set Dico = CreateObject("Scripting.Dictionary")
' We fill our Dictionary in this loop For ... Next
For Each objService in colListOfServices
    If Not dico.Exists(objService.Name) Then
        Dico.Add objService.Name,objService.PathName
    End If
Next

ArrService2Search = Array(_
                            "Adobe",_
                            "Bits",_
                            "GoogleChromeElevationService",_
                            "gupdate",_
                            "gupdatem",_
                            "sedsvc",_
                            "SynTPEnhService"_
                        )
Services = Dico.Keys

' Looking for a service name in this array ArrService2Search :
For each Service2Search in ArrService2Search 
    For each ServiceName in Services
        PathName = Dico(ServiceName)
        If Instr(UCASE(ServiceName),UCASE(Service2Search)) > 0 Then
            MsgBox "The service : " & chr(34) & ServiceName & chr(34) & " Exists !" & vbcrlf &_
            "Path : "& chr(34) & PathName & chr(34),Title
        End If
    Next
Next

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...