我想创建一个脚本,当新文件添加到文件夹时,该脚本将运行声音。 问题是我打开vbscript至少5次来测试代码,当我只添加1个文件时代码运行5次。看起来脚本的多个实例同时运行。
如何恢复脚本? 编辑:我发现了一个临时修复,即使用重启WMI服务 net stop winmgmt net start winmgmt 但这是不实际的,因为我每次都必须重新启动WMI以使用WMI测试vbscript。
Dim objShell
Set objShell = Wscript.CreateObject("WScript.Shell")
strComputer = "."
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=""c:\\\\scripts""'")
Do
Set objLatestEvent = colMonitoredEvents.NextEvent
objShell.Run "Soundscript.vbs"
' Using Set is mandatory
Set objShell = Nothing
Set objWMIService = Nothing
Loop
答案 0 :(得分:2)
你有一个无限循环,如果是有意的话这很好,但意味着对于测试你总是要杀死进程(因为没有条件导致它自己退出)。如果要双击脚本来测试它,则必须终止wscript.exe进程以终止脚本;或者,为了测试它可能更容易打开命令提示符并通过cscript运行脚本,例如cscript C:\scripts\myscript.vbs
这将允许您在需要时通过将Ctrl + C发送到命令提示符来终止脚本。
现在我会反驳自己,因为你的脚本中有一些东西会导致它退出,即你在循环中破坏objShell
对象但在下一次再次使用它的事实迭代。这将导致第二次迭代出现运行时错误,导致脚本终止(因为未启用错误处理)。您可以非常愉快地从循环中删除两个Set x = Nothing
语句。
答案 1 :(得分:0)
使用cscript.exe通过右键单击它来测试脚本,如下所示。双击以运行该脚本将默认使用在后台运行的wscript.exe。
不应添加以下代码。它将处理绑定到事件侦听器的WMI对象,退出循环和脚本。
Set objWMIService = Nothing