过滤以不包含多个扩展名

Filter to not include multiple extensions

最近我将 FTP 连接到 Sharefile。 Sharfile 在我的 ftp 文件夹中创建一个 .syncdb 文件。我有代码检查我的 FTP 文件夹中是否有创建的新文件,将它们复制到新文件夹并发送文件已到达的通知电子邮件。有时我现在会收到有关 .syncdb-wal 和 syncdb-shm 文件的电子邮件。这实际上不会创建要复制的文件,但会创建通知电子邮件并创建一个空白文件夹,这很麻烦。我试图不使用过滤器包含这些文件,但它似乎不起作用。我不确定您是否可以为过滤器声明多个扩展。下面是我试图用来过滤文件以不包含扩展名为 .syncdb-wal 和 syncdb-shm 的文件的代码,我可能遗漏了一些简单的东西。

$MonitorFolder = Get-Content "C:\Users\RickG\Desktop\ScanFTPDeptClients\Pathlist.txt"

$filter ='*.syncdb-wal, *.syncdb-shm '
foreach ($path in $MonitorFolder){
$watcher = New-Object System.IO.FileSystemWatcher $path, -ne $filter
#Files only. Default is files + directory
$watcher.NotifyFilter = [System.IO.NotifyFilters]'FileName,LastWrite'
}

不,您不能应用多个文件名过滤器。

改为检查事件处理程序中的文件名

$watcher = New-Object System.IO.FileSystemWatcher $path
$watcher.NotifyFilter = [System.IO.NotifyFilters]'FileName,LastWrite'
$watcher.Filter = '*.*'

Register-ObjectEvent $watcher -EventName Created -Action {
    if ($EventArgs.Name -eq '.syncdb-wal' -or $EventArgs.Name -eq '.syncdb-shm'){
        # nope, not interested
        return
    }
}