So verwenden Sie „Prozess starten“ als Aktion für FileSystemWatcher in Power Shell

So verwenden Sie „Prozess starten“ als Aktion für FileSystemWatcher in Power Shell

Ich kann System.IO.FileSystemWatcher erfolgreich verwenden, um einen Ordner und Unterverzeichnisse auf erstellte Dateien zu überwachen, aber wenn ich versuche, eine Batchdatei mit Start Process auszuführen, wird sie einmal ausgeführt, aber dann nie wieder ausgelöst. Ich habe eine Antwort von geändertHier.

Hier ist mein Powershell-Skript

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

Hier ist die Batchdatei, die ich ausführe

@echo off
CD %~dp1
ffmpeg -i %~nx1 %~n1.mp3 -loglevel panic
del %1
REM Winscp.com /ini=null /script=uploadScript.txt /parameter %~n1.mp3

Das Powershell-Skript wird nach dem Ausführen des Prozesses weiter ausgeführt und der Prozess scheint ordnungsgemäß beendet zu werden. Wie kann ich dafür sorgen, dass es weiterhin Ereignisse verarbeitet?

verwandte Informationen