Я использую $watcher (FileSystemWatcher) для запуска $action , когда файл docx создается или изменяется в каталоге:

$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\ExportedDocuments"
$watcher.Filter = "*.docx*"
$watcher.IncludeSubdirectories = $false
$watcher.EnableRaisingEvents = $true  
$action = [scriptblock]::Create('
### here is my complete script
')
Register-ObjectEvent $watcher "Created" -Action $action
Register-ObjectEvent $watcher "Changed" -Action $action
while ($true) {}

К сожалению, в каталоге, где просматривается $watcher (FileSystemWatcher), иногда создаются временные файлы:

23.01.2009 07:53:52, Создано, C:\ExportedDocuments\~ $ FFFFFFFF.docx

Это означает, что временные файлы также обнаруживаются $watcher (FileSystemWatcher) и принудительно запускают $action .

Есть ли способ исключить эти временные файлы из $watcher?

2 ответа2

1

К сожалению нет. Ваш обработчик должен будет определить, какой файл является временным файлом, и игнорировать его. В случае временных файлов MSWord: имя начинается с тильды (~) и / или скрытого атрибута

1

Согласно документации, у вас не может быть нескольких фильтров:

Использование нескольких фильтров, таких как « .txt |.doc», не поддерживается.

Однако вы можете установить фильтр в вашем $ action. Например :

$action = { $fileName = Split-Path $Event.SourceEventArgs.FullPath -leaf

            if ($fileName -like '~$*') { $logline = "$(Get-Date), $fileName, 'TEMP'"}
            else { $logline = "$(Get-Date), $fileName, 'NOT TEMP'" }

            Add-content "D:\test\log.txt" -value $logline
          }

Производит вывод как это:

01/23/2019 11:37:37, ~$f.docx, 'TEMP'
01/23/2019 11:37:37, ~$f.docx, 'TEMP'
01/23/2019 11:38:29, New Microsoft Word Document.docx, 'NOT TEMP'

Таким образом, чтобы просто исключить временные файлы на основе вашего шаблона '~ $', вы можете сделать $ action следующим образом:

$action = { $fileName = Split-Path $Event.SourceEventArgs.FullPath -leaf
            if (-not ($fileName -like '~$*')) {
              # Do whatever
            }
          }

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .