如何在一个文件被添加到文件夹中后自动运行一个脚本?

发布网友 发布时间:2022-04-22 07:33

我来回答

1个回答

热心网友 时间:2022-06-17 19:10

这是可以办到的。这要归功于 WMI 事件的神奇功能,它使您可以编写脚本来监视所关心的事情(比如:文件被添加到文件夹中),然后在发生此类事件时,采取特定的行动。我们没有时间在本专栏里讨论 WMI 事件,但是它们对于脚本编写者来说,极其有用。因此,值得您花时间访问该脚本故事 专栏。同时,这里有一个脚本可以监视 C:\Scripts 文件夹。只要有文件被添加到这个文件夹中,该脚本就会通过回显新文件的名称做出回应: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 Wscript.Echo objLatestEvent.TargetInstance.PartComponent Loop 这里所涉及的内容太多,我们无法详细剖析该脚本,但是我们所要找的就是 __InstanceCreationEvent 类别的实例;只要计算机上创建了新的受控对象(即 WMI 所了解的对象),就会自动创建该类别的实例。虽然该查询有些复杂,但可以简单归结为:只要有新的项目出现在 C:\Scripts 里,我们就想得到通知。(请注意,C:\\\\Scripts 不是打印错误;这里必须有四个斜杠。)我们还需要提一下,这类 WMI 脚本采用“轮询”的工作方式;它将定期检查是否有新的文件被添加到该文件夹中。在该示例中,我们每 10 秒检查一次(就是 WITHIN 10 所表示的),来确定该文件夹中是否有新的文件。如果这一频率过快或过慢,可以随意更改该值。但是,请记住两点。其一,如果轮询地过于频繁(比方说每秒执行一次),那么脚本就会一直在运行,从而在理论上会耗尽系统资源。相反,如果将该值设置的过大,可能会错过一些新文件,假设在轮询时间到来之前这些文件就被添加并随之被删除。例如,假设您的脚本每 5 分钟检查一次新文件。如果您添加了 100 个新文件,并在 3 分钟后将它们统统删除,那么该脚本将永远无法知道那些文件曾被添加到该文件夹中。这是因为这类脚本的工作原理是:将文件夹中的当前文件与脚本最后一次检查的文件夹中的文件进行比较。尝试采用不同的轮询时间间隔,看看哪个最合适。正如我们所注意到的,该脚本将回显任何被添加到 C:\Scripts 的新文件的名称。如果想在文件被添加到文件夹时做一些更有趣的事情,该怎么办呢?没问题;只要使用您想在检查到新文件时执行的代码替换这行代码就行了:Wscript.Echo objLatestEvent.TargetInstance.PartComponent顺便说一下,您想在文件从 C:\Scripts 中删除时得到通知吗?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com