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?