Windows:文件监控脚本(批处理/VBS)

6

我目前正在编写一个脚本来创建一个自定义备份脚本,唯一缺少的部分是文件监视器。我需要某种形式的脚本来监视文件夹中的文件变化,然后使用已更改的文件运行命令。

例如,如果文件发生更改,它将执行“c:/syncbatch.bat %Location_Of_File%”

2个回答

6
在VBScript中,您可以订阅WMI __InstanceModificationEvent事件来监视文件夹的文件更改。这些文章包含示例代码,您可以学习并根据自己的需求进行调整:
- WMI和文件系统监视 - 如何使用一个脚本监视不同类型的事件?

0

调用 WMI 相当晦涩难懂,它会导致 WMI 服务开始运行,这可能会导致膨胀,因为它非常大,而且您无法取消所请求的文件更改通知,只能重新启动计算机。有些人尝试从 Dropbox 文件夹进行远程打印,发现一个简单的 VBScript 程序,在循环中运行具有10秒 WScript.Sleep 调用的无限循环使用的资源要少得多。当然,要停止它,您必须终止该脚本或在监听文件夹中找到一个特定命名的空文件来触发退出,但这仍然比处理 WMI 更容易。

The Folder Spy http://venussoftcorporation.blogspot.com/2010/05/thefolderspy.html 是一款免费的轻量级 DOT.NET 文件/文件夹监视 GUI 应用程序,我以前使用过它来基于文件更改运行脚本。新版本看起来可以将事件文件名传递给启动的命令。我使用的旧版本尚未支持文件事件信息,因此在启动时,我的脚本必须实例化一个文件系统对象并扫描受监视的文件夹,以根据日期戳和大小等标准定位新文件。

这个新版本似乎允许你在可选的脚本调用条目中传递文件名,如果你说 myscript.vbs "*f"。引号在传递具有空格文件夹名称的文件路径时可能很重要。只需记住,如果您正在观察更改事件,您将会得到很多这样的事件,因为文件增长或被编辑,通常您只需要通知文件添加或删除。

你的脚本可以做的另一个技巧是将文件大小放入变量中,睡眠几秒钟,然后再次检查文件是否已更改。如果它在几秒钟内没有更改,通常可以假定创建它的任何内容都已将其写入磁盘。如果它一直在变化,只需循环直到它稳定下来。


1
除非被故意禁用,WMI 在我使用过的自 XP 以来的每个 Windows 系统上都在运行。所以不确定它比第三方 .Net 应用程序更臃肿? - GravityWell
@GraviWell 它是可移植的,体积小,并且对我来说可以按照指令终止。文件夹监视器是解决这个问题的更好选择。另外,它拥有一个软件开发工具包(SDK),这将对我另外一个计划非常有用。因此,对该应用程序竖起双拇指。 - vvolkgang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接