Benutzer mit den meisten Antworten
Dateien in neu erstellten Unterordner -recurse verschieben

Frage
-
Hallo zusammen,
eigentlich wahrscheinlich nicht schwer. Aber ich bekomme es nicht hin.
Ich erstelle pro Mitarbeiterordner einen Unterordner mit dem Namen, Variable des aktuellen Tages, "09-11-2020". Nach der Erstellung des Ordners sollen alles Dateien mit dem Erstelldatum 09.11.2020 aus dem Mitarbeiterordner in den Unterordner "09-11-2020" verschoben werden.
Das Prozedere passiert dann jeden Tag um 23:59.
So sieht mein Skript aus. Das Erstellen des Unterordners funktioniert, das Verschieben funktioniert leider nicht.
cd "F:\Ordner\MA\Name\Postordner" $heute = Get-Date -UFormat "%d-%m-%y" $path = "F:\Ordner\MA\Name\Postordner" $ma_pathes = get-Childitem $path foreach ($ma_path in $ma_pathes) { New-Item ("$path\$ma_path\$heute") -ItemType Directory } $files = Get-ChildItem $ma_path -File -recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-1))} foreach ($file in $files) { move-item -path $file -Destination $ma_path\$heute\ -Force }
Vielen Dank für Eure Unterstützung!
Chris
Antworten
-
$path = "F:\Ordner\MA\Name\Postordner" Set-Location $path $heute = Get-Date -UFormat "%d-%m-%y" $ma_pathes = get-Childitem $path foreach($ma_path in $ma_pathes) { $TargetFolder = New-Item "$path\$ma_path\$heute" -ItemType Directory $files = Get-ChildItem $ma_pathes -File | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(0))} Foreach ( $file in $files ) { Move-Item $file -Destination $TargetFolder.FullName } }
Ohne Gewähr...Greetings/Grüße, Martin - https://mvp.microsoft.com/en-us/PublicProfile/5000017 Mal ein gutes Buch über GPOs lesen? - http://www.amazon.de/Windows-Server-2012--8-Gruppenrichtlinien/dp/3866456956 Good or bad GPOs? My blog - http://evilgpo.blogspot.com And if IT bothers me? Coke bottle design refreshment - http://sdrv.ms/14t35cq
- Als Antwort markiert Denniver ReiningMVP, Moderator Samstag, 14. November 2020 22:44
Alle Antworten
-
Warum erstellst du einen Pfad mit "heute" aber suchst nur Dateien mit Zugriff "gestern"?
- Bearbeitet Der Suchende Montag, 9. November 2020 12:13
-
Da sind gleich mehrere logische Fehler drin...
1. Du suchst unterhalb von Postordner nach "allem", was da direkt enthalten ist - Dateien und Ordner. Für alles, was Du findest, erstellst Du dann einen Ordner $ma_path\$heute - für Ordner mag das ja noch sinnvoll sein, für Dateien eher nicht :-)
2. Die Suche nach $files findet genau einmal statt - in $ma_path steht dabei das, was in $ma_pathes als letztes enthalten ist. Die Zeilen nach der ersten Foreach-Schleife gehören IN diese Schleife statt dahinter.
3. Die Suche nach $files findet natürlich auch alles, was in den "Archiv-Ordnern" vergangener Läufe schon enthalten ist - um das zu lösen, müssen die Archive einen gemeinsames separaten Stammordner haben - oder Du läßt -recurse weg.
Und "funktioniert nicht" ist eine sehr generische Fehlerbeschreibung - was passiert denn auf dem Bildschirm, wenn Du's ausführst? Und was steht hinterher in den ganzen Variablen so als Wert drin?
- Bearbeitet Martin Binder Montag, 9. November 2020 13:49
- Als Antwort markiert Denniver ReiningMVP, Moderator Samstag, 14. November 2020 22:43
- Tag als Antwort aufgehoben Denniver ReiningMVP, Moderator Samstag, 14. November 2020 22:44
-
Vielen Dank für die ausführliche Antwort!
Ich habe es jetzt so gemacht:
cd "F:\Ordner\MA\Name\Postordner" $heute = Get-Date -UFormat "%d-%m-%y" $path = "F:\Ordner\MA\Name\Postordner" $ma_pathes = get-Childitem $path foreach($ma_path in $ma_pathes) { New-Item ("$path\$ma_path\$heute") -ItemType Directory $files = Get-ChildItem $ma_pathes -File | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(0))} Move-Item $files -Destination "$ma_path\$heute" }
Bis zu
Move-Item $files -Destination "$ma_path\$heute"
funktioniert es auch auf den ersten Blick.
Bei dem Verschiebe-Befehl greift er aber nur auf "F:\Ordner\MA\Name\Postordner" nicht aber auf die darunterliegenden Ordner. Es sollen ja gerade die Files in den Unterordnern vom Postordner in dem darin befindlichen Tagesordner verschoben werden.
Wenn ich aber die Variable $Files auflöse findet es zumindest die Dateien. Nur müssen dies jetzt noch bei Move-Item in den Tagesordner verschoben werden.
-
Du kannst nicht Dateien aus verschiedenen Ordnern in einem einzigen Move-Item verschieben - das muß (wie vorher) per verschachtelter Schleife passieren.
Greetings/Grüße, Martin - https://mvp.microsoft.com/en-us/PublicProfile/5000017 Mal ein gutes Buch über GPOs lesen? - http://www.amazon.de/Windows-Server-2012--8-Gruppenrichtlinien/dp/3866456956 Good or bad GPOs? My blog - http://evilgpo.blogspot.com And if IT bothers me? Coke bottle design refreshment - http://sdrv.ms/14t35cq
-
$path = "F:\Ordner\MA\Name\Postordner" Set-Location $path $heute = Get-Date -UFormat "%d-%m-%y" $ma_pathes = get-Childitem $path foreach($ma_path in $ma_pathes) { $TargetFolder = New-Item "$path\$ma_path\$heute" -ItemType Directory $files = Get-ChildItem $ma_pathes -File | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(0))} Foreach ( $file in $files ) { Move-Item $file -Destination $TargetFolder.FullName } }
Ohne Gewähr...Greetings/Grüße, Martin - https://mvp.microsoft.com/en-us/PublicProfile/5000017 Mal ein gutes Buch über GPOs lesen? - http://www.amazon.de/Windows-Server-2012--8-Gruppenrichtlinien/dp/3866456956 Good or bad GPOs? My blog - http://evilgpo.blogspot.com And if IT bothers me? Coke bottle design refreshment - http://sdrv.ms/14t35cq
- Als Antwort markiert Denniver ReiningMVP, Moderator Samstag, 14. November 2020 22:44
-
Solltest Du nicht innerhalb der Schleife lieber
$files = Get-ChildItem $ma_path -File ...
anstatt
$files = Get-ChildItem $ma_pathes -File ...
benutzen? Sonst hächelst Du für jeden einzelnen $ma_path jedesmal wieder alle $ma_pathes durch!? ... oder hab ich was verpasst?
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
-
Vielen Dank!
Allerdings habe jetzt nur noch das Problem, dass die Dateien nicht im Unterordner verschoben werden
Move-Item : Der Pfad "F:\Test\Scan\123.pdf" kann nicht gefunden werden, da er nicht vorhanden ist.
Hinter dem \Scan muss noch eine Ebene tiefer gegangen werden und erst da die Dateien in den Ordner $heute verschoben werden. F:\Test\Scan\MITARBEITERORDNER\123.pdf
Bei
$TargetFolder = New-Item "$path\$ma_path\$heute" -ItemType Directory
wird es richtig gemacht. Es wird ein Ordner mit heutigem Datum angelegt. F:\Test\Scan\MITARBEITERORDNER\11-11-20Allerdings funktioniert dann $TargetFolder nicht bei move-item?
Leider bekomme ich es nicht hin.
Wäre super, wenn ich nochmal Hilfe bekommen könnte!
Vielen Dank!