Powershell - Dateien automatisiert verschieben und umbennen
Hallo Zusammen,
ich bin mal wieder auf eure Hilfe angewiesen da ich mich wieder zu dämlich anstelle.
Problematik:
Wir bekommen jeden Tag auf dem sFTP Dateien vom Kunden bereit gestellt. Diese möchte ich nun in einen Hotfolder zur weiterverarbeitung verschieben.
Schritt 1: Dateien vom sFTP holen -> erledigt mit externem Tool da es dafür anscheind keine Windows Boardmittel gibt.
Schritt 2: Dateien aus diesem Ordner bzw den Unterordnern verschieben.
Problem 1: Dieser Ordner heißt jeden Tag anders (aktuelles Datum z.b. 20201208)
Problem 2: für die Weiterverarbeitung brauche ich noch ein Kürzel an der Datei damit ich weiß aus welchem Ordner sie kommt z.B. RDE-Dateiname.pdf für Rechnung Deutschland
Ich habe jetzt schon ein Powershellscript gefunden und angepasst aber aus irgendeinem Grund kopiert er die daten nicht.
Powershell liefert allerdings auch keine Fehlermeldung.
vorhandene Struktur
Ordner mit aktuellem Datum -> Ordner 1 , Ordner 2, Ordner 3, Ordner 4
Beim "Root" Ordner ändert sich jeden Tag das Datum, die Ordner 1-4 heißen immer gleich. Es kann sein das einzelne Ordner davon aber auch mal leer sind. Ansonsten sind immer PDFs drin.
Diese PDFs sollen nun in einen Ordner kopiert werden und es soll ein Kürzel für den jeweiligen Ordner an den Dateinamen vorangestellt werden. Wichtig dabei nur die Dateien und nicht die Ordner da, das Tool welches die dateien weiterverarbeitet nicht mit Unterverzeichnissen umgehen kann.
Original Script zum kopieren und überwachen:
Vielen Dank schon mal für eure Hilfe
ich bin mal wieder auf eure Hilfe angewiesen da ich mich wieder zu dämlich anstelle.
Problematik:
Wir bekommen jeden Tag auf dem sFTP Dateien vom Kunden bereit gestellt. Diese möchte ich nun in einen Hotfolder zur weiterverarbeitung verschieben.
Schritt 1: Dateien vom sFTP holen -> erledigt mit externem Tool da es dafür anscheind keine Windows Boardmittel gibt.
Schritt 2: Dateien aus diesem Ordner bzw den Unterordnern verschieben.
Problem 1: Dieser Ordner heißt jeden Tag anders (aktuelles Datum z.b. 20201208)
Problem 2: für die Weiterverarbeitung brauche ich noch ein Kürzel an der Datei damit ich weiß aus welchem Ordner sie kommt z.B. RDE-Dateiname.pdf für Rechnung Deutschland
Ich habe jetzt schon ein Powershellscript gefunden und angepasst aber aus irgendeinem Grund kopiert er die daten nicht.
### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
$watcher = New-Object System.IO.FileSystemWatcher
$date =Get-Date -Format yyyyMMdd
$watcher.Path = "E:\Transfer\Kunde\$date\"
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true
### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
$action = { $path = $Event.SourceEventArgs.FullPath
robocopy /MOV E:\Transfer\kunde\ *.pdf
}
### DECIDE WHICH EVENTS SHOULD BE WATCHED
Register-ObjectEvent $watcher "Created" -Action $action
Register-ObjectEvent $watcher "Changed" -Action $action
Register-ObjectEvent $watcher "Deleted" -Action $action
Register-ObjectEvent $watcher "Renamed" -Action $action
while ($true) {sleep 1}
Powershell liefert allerdings auch keine Fehlermeldung.
vorhandene Struktur
Ordner mit aktuellem Datum -> Ordner 1 , Ordner 2, Ordner 3, Ordner 4
Beim "Root" Ordner ändert sich jeden Tag das Datum, die Ordner 1-4 heißen immer gleich. Es kann sein das einzelne Ordner davon aber auch mal leer sind. Ansonsten sind immer PDFs drin.
Diese PDFs sollen nun in einen Ordner kopiert werden und es soll ein Kürzel für den jeweiligen Ordner an den Dateinamen vorangestellt werden. Wichtig dabei nur die Dateien und nicht die Ordner da, das Tool welches die dateien weiterverarbeitet nicht mit Unterverzeichnissen umgehen kann.
Original Script zum kopieren und überwachen:
### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\***\Downloads"
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true
### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
$action = { $path = $Event.SourceEventArgs.FullPath
robocopy /MOV C:\***\Rechnungen Rechnung*.pdf
robocopy /MOV C:\***\Lieferscheine Lieferschein*.pdf
}
### DECIDE WHICH EVENTS SHOULD BE WATCHED
Register-ObjectEvent $watcher "Created" -Action $action
Register-ObjectEvent $watcher "Changed" -Action $action
Register-ObjectEvent $watcher "Deleted" -Action $action
Register-ObjectEvent $watcher "Renamed" -Action $action
while ($true) {sleep 1}
Vielen Dank schon mal für eure Hilfe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 629358
Url: https://administrator.de/contentid/629358
Ausgedruckt am: 21.11.2024 um 22:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo,
mir scheint dein Skript zum Verschieben der Dateien möglicherweise etwas "oversized". Brauchst du denn einen FileSytemWatcher, der Dateien immer _sofort_ nach einem Upload verschiebt? Oder tut es auch ein Task, den du alle X Minuten laufen lässt, und der alle Dateien verschiebt, die er findet?
Grüße
Filipp
mir scheint dein Skript zum Verschieben der Dateien möglicherweise etwas "oversized". Brauchst du denn einen FileSytemWatcher, der Dateien immer _sofort_ nach einem Upload verschiebt? Oder tut es auch ein Task, den du alle X Minuten laufen lässt, und der alle Dateien verschiebt, die er findet?
Grüße
Filipp