Search code examples
vbscriptwmiwmi-query

How to use variable name in WMI service query in VBS


How can I put the current year in CURRENT_YEAR so the folder I am monitoring is P:\\\\Folder1\\\\Folder2\\\\Folder3\\\\2020

I have the following code in a vbs file:

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE _
Targetinstance ISA 'CIM_DirectoryContainsFile' and TargetInstance.GroupComponent= 'Win32_Directory.Name=""P:\\\\Folder1\\\\Folder2\\\\Folder3\\\\CURRENT_YEAR""'")
Do
'code to execute if file in folder found
Loop

Solution

  • In vbscript you can get the year like this :


    CURRENT_YEAR=Year(Now)
    MsgBox CURRENT_YEAR
    MsgBox "P:\\\\Folder1\\\\Folder2\\\\Folder3\\\\"& CURRENT_YEAR &""
    

    CURRENT_YEAR=Year(Now)
    sPath = "F:\Folder1\Folder2\Folder3\"& CURRENT_YEAR
    sDrive = split(sPath,":")(0)
    sFolders1 = split(sPath,":")(1)
    sFolders = REPLACE(sFolders1, "\", "\\\\")
    TargetFolder = DblQuote(sDrive & ":" & sFolders)
    
    wscript.echo sPath
    wscript.echo TargetFolder
    
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & _
        strComputer & "\root\cimv2")
    
    Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
        ("Select * From __InstanceCreationEvent Within 2 Where " _
        & "Targetinstance Isa 'CIM_DirectoryContainsFile' and " _
        & "TargetInstance.GroupComponent= " _
        & "'Win32_Directory.Name="& TargetFolder &"'")
    
    ' The loop
    Do
        Set objLatestEvent = colMonitoredEvents.NextEvent
        Wscript.Echo objLatestEvent.TargetInstance.PartComponent
    Loop
    '-------------------------------------------------------------
    Function DblQuote(str)
        DblQuote = chr(34) & str & chr(34)
    End Function
    '-------------------------------------------------------------