【问题标题】:Powershell IO.FileSystemWatcher filtersPowershell IO.FileSystemWatcher 过滤器
【发布时间】:2018-12-20 16:18:09
【问题描述】:

我创建了一个IO.filesystemwatcher 来监视文件夹并在将某些文件类型写入该位置时采取措施。我正在寻找文件类型.jpg.tmp。我已将过滤器命名为变量,过滤器在包含一种文件类型时有效,但不是两种类型。

以下代码正常运行:

$filter = '*.jpg'
New-Object IO.FileSystemWatcher $Folder, $filter -Property @{IncludeSubdirectories = $true;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}

以下代码正常运行:

$filter = '*.tmp'
New-Object IO.FileSystemWatcher $Folder, $filter -Property @{IncludeSubdirectories = $true;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}

下面的代码不起作用:

$filter = '*.tmp','*jpg'
New-Object IO.FileSystemWatcher $Folder, $filter -Property @{IncludeSubdirectories = $true;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}

我也试过$filter = '*.tmp' -or '*jpg'

我确信有一种不同的方法可以让它发挥作用,但我不太擅长使用 IO.filesystemwatcher。任何建议表示赞赏。

谢谢

【问题讨论】:

    标签: powershell filesystemwatcher


    【解决方案1】:

    .Filter property[string] 类型的,仅支持单个 通配符表达式;来自文档:

    不支持使用多个过滤器,例如 "*.txt|*.doc"

    听起来你必须:

    • 或者:通过将.Filter 设置为''(空字符串)来监视所有文件的更改,然后在事件处理程序中执行您自己的过滤。 p>

    • 或者:为每个过滤器设置一个单独的观察者实例(通配符模式)。 谢谢mhhollomon

    【讨论】:

    • @mhhollomon:好主意,谢谢 - 我已将您的建议添加到答案中。
    【解决方案2】:

    Filter is a single string. 您可以检查引发的事件以找到完整路径并将其与您的过滤器进行比较:

    $Script:filter = @('*.txt','*jpg','*.csv')
    If($FileWatcher){$FileWatcher.Dispose();$FileWatcher = $null}
    $FileWatcher = New-Object System.IO.FileSystemWatcher -Property @{
        IncludeSubdirectories = $true;
        NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
        Path =  'C:\Users\proxb\Desktop\DropBox\'
    }
    Register-ObjectEvent -InputObject $FileWatcher  -EventName Created -Action {
        Write-Host "File: $($event.SourceEventArgs.FullPath) was $($event.SourceEventArgs.ChangeType) at $($event.TimeGenerated) "
        $Script:filter | ForEach{
            If($event.SourceEventArgs.FullPath -like $_){
                Write-Host "$($event.SourceEventArgs.FullPath) matched $_" 
                #Do something here
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-08
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2020-05-21
      • 2019-02-06
      相关资源
      最近更新 更多