Überwachen eines Ordners mit PowerShell

0

Dieses Skript überwacht einen Ordner. Wenn neue Bilder erstellt werden, verschieben Sie diese in den Bildordner. Sehr einfach.

Aber ich habe es teilweise funktioniert. Das Problem ist nur, dass alte Bilder verschoben werden; neu geschaffene nicht.

Ich beginne mit einem leeren Ordner, lade ein Bild (1.jpg) in den Ordner herunter, nichts wird auf das Z: -Laufwerk verschoben. Dann lade ich ein anderes Bild (2.jpg) in diesen Ordner herunter, nur 1.jpg wird nach Z: Laufwerk verschoben; 2.jpg bleibt wo es ist. Scheint, als ob die neu erstellten nie verschoben werden.

$folder = "C:\\Doc\\Files"
$dest = "C:\\Doc\\Files\\images"
$filter = "*.jpg"

$fsw = new-object System.IO.FileSystemWatcher $folder, $filter -Property @{
    IncludeSubDirectories=$false
    NotifyFilter = [System.IO.NotifyFilters]'FileName, LastWrite'
}

$onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {

    Start-Sleep -s 10
    Move-Item -Path C:\Doc\Files\*.jpg C:\Doc\Files\images
}

Aktualisieren:

Nachdem ich "Start-Sleep -s 10" vor dem Move-Item hinzugefügt habe, funktioniert es jetzt. Aber gibt es eine bessere Lösung?

qinking126
quelle
Es hört sich so an, als wären die neuen Dateien beim Versuch, sie zu kopieren, noch durch den Schreibvorgang gesperrt. Haben Sie darüber nachgedacht, den Faden für ein paar Sekunden zu schlafen? Wie oft werden durchschnittlich Bilder hinzugefügt?
Frank Thomas
Jeden Tag werden nur wenige Bilder zum Ordner hinzugefügt. Ich kann ein paar Sekunden warten, bin mir aber nicht sicher, wie ich das machen soll.
qinking126
Ich habe "Start-Sleep -s 10" hinzugefügt, jetzt funktioniert es, aber ich sehe immer noch nach, ob es eine bessere Lösung gibt.
qinking126
Möglicherweise müssen Sie versuchen, die Datei zum Schreiben zu öffnen und zu prüfen, ob sie eine Ausnahme auslöst. Siehe diese Antwort auf StackOverflow. Es ist in .net, also sollten Sie nicht zu viele Probleme beim Neuformatieren für Powershell haben. Schleife einfach, bis es keine Ausnahme gibt oder eine Zeitüberschreitung verstrichen ist. stackoverflow.com/questions/1304/how-to-check-for-file-lock
Frank Thomas
Eine weitere Option ist, dass Sie versuchen können, die Datei zu kopieren, anstatt sie zu verschieben, da beim letzten Aktualisieren des Schreibvorgangs angezeigt wird, dass der Schreibvorgang abgeschlossen ist, die Sperren jedoch möglicherweise nicht freigegeben sind. Löschen Sie sie nach Abschluss des Kopiervorgangs als separaten Vorgang. Normalerweise können Sie eine gesperrte Datei zum Kopieren lesen, sie zum Schreiben nicht öffnen oder ihre Deskriptoren (Name, Pfad usw.) ändern. Wenn Sie es zuerst kopieren, dauert es möglicherweise einige Nanosekunden, bis der Löschvorgang abgeschlossen ist.
Frank Thomas