过滤到不包含多个扩展名

时间:2016-07-19 19:56:00

标签: powershell filter file-watcher

最近我将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'
}

1 个答案:

答案 0 :(得分:2)

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

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

$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
    }
}