vbs变量未定义:'objObject'

时间:2014-08-27 00:17:39

标签: arrays object vbscript syntax-error

好的,我的问题是我在第39行第4行收到Variable is undefined: 'objObject'错误。如果我删除第39-46行,那么一切都很好但是代码的目的是重新格式化输出回显看起来像z:\\\\BAIBOA\\test.txt的对象,并将其更改为一个类似于此z:\BAIBOA\test.txt的字符串,以便稍后在代码中使用。此代码已经从其他来源编辑,所以也许我还没有完全理解发生了什么。任何帮助将不胜感激。

 Option Explicit
   Dim arrFolders, strComputer, objWMIService, strFolder, strCommand
   Dim i, strQuery, strNewFile, arrNewFile, strFilePath, strTempFilePath
   Dim colMonitoredEvents, strQueryFolder


   arrFolders = Array("Z:\\\\test1", "Z:\\\\test2", "Z:\\\\test2")

   strComputer = "."
   'strQueryFolder = Replace(strFolder, "\", "\\\\")
   Set objWMIService = GetObject("winmgmts:\\" & strComputer _
                           & "\root\CIMV2")
   'Loop through the array of folders setting up the monitor for Each
i = 0
  For Each strFolder In arrFolders
  'Create the event sink
  strCommand = "Set EventSink" & i & " = WScript.CreateObject" & _
               "(""WbemScripting.SWbemSink"", ""SINK" & i & "_"")"
  ExecuteGlobal strCommand
  'Setup Notification
  strQuery = "SELECT * FROM __InstanceCreationEvent WITHIN 10 " & _
             "WHERE Targetinstance ISA 'CIM_DirectoryContainsFile'" & _
             " and TargetInstance.GroupComponent = " & _
             "'Win32_Directory.Name=""" & strFolder & """'"

  strCommand = "objWMIservice.ExecNotificationQueryAsync EventSink" & _
               i & ", strQuery"
  ExecuteGlobal strCommand
  'Create the OnObjectReady Sub
  strCommand = "Sub SINK" & i & "_OnObjectReady(objObject, " & _
               "objAsyncContext)" & VbCrLf & vbTab & _
               "Wscript.Echo objObject.TargetInstance.PartComponent" & _
               VbCrLf & "End Sub"

  'WScript.Echo strCommand

  ExecuteGlobal strCommand
  i = i + 1

---> Line 39    Set objLatestEvent = objObject.TargetInstance.PartComponent
 strNewFile = objLatestEvent.TargetInstance.PartComponent
 arrNewFile = Split(strNewFile, "=")
 strFilePath = arrNewFile(1)
 strFilePath = Replace(strFilePath, "\\", "\")
 strFilePath = Replace(strFilePath, Chr(34), "")
 strFileName = Replace(strFilePath, strFolder, "")
 'strTempFilePath = WScript.CreateObject("Scripting.FileSystemObject").GetSpecialFolder(2) & "\TEMP.M4A"

 Wscript.Echo strFilePath

 Next
   WScript.Echo "Waiting for events..."

   i = 0
   While (True)
       Wscript.Sleep(1000)
   Wend

好的我已经想出了输出的解决方案,但现在我不能让脚本正确增加,并且只有在第一个文件夹获取文件时才会转到下一个文件夹。我需要的是它扫描阵列中的新文件不是1 :(任何建议

 Option Explicit
   Dim arrFolders, strComputer, objWMIService, strFolder, strCommand
   Dim i, strQuery, strNewFile, arrNewFile, strFilePath, strTempFilePath
   Dim colMonitoredEvents, strQueryFolder, objObject, objLatestEvent
   Dim strFileName

   arrFolders = Array("Z:\\\\test1", "Z:\\\\test2", "Z:\\\\test2")

 strComputer = "."
   i = 0
   For Each strFolder In arrFolders

 'trQueryFolder = Replace(strFolder, "\", "\\\\")

 strQueryFolder = strFolder

 Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
 Set colMonitoredEvents = objWMIService.ExecNotificationQuery ("SELECT * FROM __InstanceCreationEvent WITHIN 10 " & " WHERE Targetinstance ISA 'CIM_DirectoryContainsFile' and TargetInstance.GroupComponent='Win32_Directory.Name=""" & strQueryFolder & """'") 

 Wscript.Echo strQueryFolder

 'Do 
     Set objLatestEvent = colMonitoredEvents.NextEvent

     strNewFile = objLatestEvent.TargetInstance.PartComponent
     arrNewFile = Split(strNewFile, "=")
     strFilePath = arrNewFile(1)
     strFilePath = Replace(strFilePath, "\\", "\")
     strFilePath = Replace(strFilePath, Chr(34), "")
     strFileName = Replace(strFilePath, strFolder, "")
     strTempFilePath = WScript.CreateObject("Scripting.FileSystemObject").GetSpecialFolder(2) & "\TEMP.M4A"

     ' DO THE OPERATION STUFF
     ' ...
       'Wscript.Echo objLatestEvent.TargetInstance.PartComponent
       Wscript.Echo strFilePath
 '    If strFileName = strQueryFolder then i = i + 1 Else

 'Loop

       i = i + 1
   Next
   'WScript.Echo "Waiting for events..."

   i = 0
   While (True)
       Wscript.Sleep(1000)
  Wend

0 个答案:

没有答案