Consigo usar System.IO.FileSystemWatcher com êxito para monitorar uma pasta e subdiretórios para arquivos criados, mas quando tento executar um arquivo em lote usando Iniciar processo, ele é executado uma vez, mas nunca mais é acionado. Modifiquei uma resposta deaqui.
Aqui está meu script do PowerShell
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\lectures"
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true
$action = { $path = $Event.SourceEventArgs.FullPath
Write-Host "Event Fired"
$ext = [io.path]::GetExtension($path)
if($ext -eq ".wma"){
$file = [io.path]::GetFileNameWithoutExtension($path)
$folder = Split-Path(Split-Path $path -Parent) -Leaf
$date = Get-Date -UFormat "%Y-%m-%d"
$newName = $folder + "_" + $date + $ext
$newPath = Rename-Item -path $path -newname $newName -PassThru
Start-Process "C:\lectures\deploy.bat" $newPath
}
}
Register-ObjectEvent $watcher "Created" -Action $action
while ($true) {
Write-Host "Still Alive"
sleep 5
}
Aqui está o arquivo em lote que estou executando
@echo off
CD %~dp1
ffmpeg -i %~nx1 %~n1.mp3 -loglevel panic
del %1
REM Winscp.com /ini=null /script=uploadScript.txt /parameter %~n1.mp3
O script do PowerShell continua em execução após a execução do processo e o processo parece estar encerrando corretamente. Como faço para continuar processando eventos?