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

How can I search with the value item instead of key in Exists method dictionary with Vbscript?

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") 值而不是键 d.Exists("c") ??

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,objWMIService,colListOfServices,objService,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),vbInformation,Title
        End If
    Next
Next