У меня есть этот небольшой скрипт, который я проверяю на наличие новых файлов в моей музыкальной папке и перемещает их в соответствующую папку артистов. Если эта папка не существует, она создает ее, а затем перемещает файл mp3 / flac / m4a во вновь созданную папку. Единственная проблема заключается в том, что когда он создает эту новую папку, которая также запускает ObjectEvent в сценарии, так что он начинает действовать глупо. Можно ли изменить скрипт так, чтобы он вызывал событие только при добавлении новых файлов, а не новых папок?
###Load taglib
$TagLib = "F:\Music-10-12-2016\Scripts\taglib-sharp.dll"
#Load it into Powershell
[system.reflection.assembly]::loadfile($TagLib)
### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "F:\Music-10-12-2016\Leak"
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $false
$watcher.EnableRaisingEvents = $true
### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
$action = { Write-Host "Recieved Event"
$path = $Event.SourceEventArgs.FullPath
$changeType = $Event.SourceEventArgs.ChangeType
$logline = "$(Get-Date), $changeType, $path"
$media = [TagLib.File]::Create(($path))
$artists = [string]$media.Tag.Artists
Write-Host $artists
Write-Host $logline
Write-Host $path
Add-content "F:\Music-10-12-2016\Scripts\log.txt" -value $logline
Add-content "F:\Music-10-12-2016\Scripts\log.txt" -value $artists
if(!(Test-Path -Path "F:\Music-10-12-2016\Leak\$artists" )){
New-Item -ItemType directory -Path "F:\Music-10-12-2016\Leak\$artists"
Write-Host "New folder created"
Start-Sleep -s 2
}
Move-Item -Path "$path" -Destination "F:\Music-10-12-2016\Leak\$artists"
Add-content "F:\Music-10-12-2016\Scripts\log.txt" -value "moved"
}
### DECIDE WHICH EVENTS SHOULD BE WATCHED
Register-ObjectEvent $watcher "Created" -Action $action
while ($true) {
sleep 2
Write-Host "Monitoring"
}