【问题标题】:Powershell: FileSystemWatcher monitor only certain subfoldersPowershell:FileSystemWatcher 仅监视某些子文件夹
【发布时间】:2015-11-14 00:47:21
【问题描述】:

如何在 Powershell 中使用 FileSystemWatcher 仅监控文件夹的某些子文件夹?

我像这样创建一个新的 FileSystemWatcher:

$folder = 'path\to\root\monitoring\folder'
$filter = '*.xml'   

$fsw = New-Object IO.FileSystemWatcher

$fsw.Path = $folder
$fsw.Filter = $filter
$fsw.IncludeSubdirectories = $true
$fsw.EnableRaisingEvents = $true

在那个根监控文件夹中有一个树状结构:

任务01

  • 工作
  • 批准
  • 已批准

任务02

  • 工作
  • 批准
  • 已批准

任务03

  • 工作
  • 批准
  • 已批准

我只想检查“已批准”文件夹中的更改。

最简单的解决方案是

$folder = 'path\to\root\monitoring\folder\*\approved'

但这似乎并不完全奏效......

【问题讨论】:

    标签: powershell wildcard filesystemwatcher


    【解决方案1】:

    您必须在要监控的每个目录上设置一个观察程序,因为路径不支持通配符(请参阅此链接上的例外部分FileSystemWatcher.Path) 尝试使用 Filter 属性来支持可能的通配符路径也不起作用。

    【讨论】:

    • 这很糟糕,因为“已批准”文件夹是具有不同名称的可变数量的文件夹。似乎我必须监控每一个变化,然后过滤我感兴趣的那些。还是谢谢你!
    【解决方案2】:

    嗯,一种可能的解决方法是评估我们的事件处理程序(创建、更改等)中的“路径”值,以查看它是否符合您要监视和处理的文件夹的模式。如果合适,则继续运行 Event Handler 中的代码,如果不合适,则直接从 Handler 中返回。

    【讨论】: