none
Dateien in neu erstellten Unterordner -recurse verschieben RRS feed

  • 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

    Montag, 9. November 2020 12:03

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

    Dienstag, 10. November 2020 10:41

Alle Antworten

  • Warum erstellst du einen Pfad mit "heute" aber suchst nur Dateien mit Zugriff "gestern"?
    Montag, 9. November 2020 12:13
  • Vielen Dank für den Hinweis! Aber selbst wenn ich das ändere, funktioniert es nicht.
    Montag, 9. November 2020 12:28
  • 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?

    Montag, 9. November 2020 13:32
  • 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.


      

    Montag, 9. November 2020 14:19
  • 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

    Montag, 9. November 2020 14:56
  • Ok, dass habe ich verstanden. Aber ich weiß nicht, wie ich das in der Syntax umsetze. Könntest Du mir dabei behilflich sein?
    Wie gesagt, es klappt alles, außer das Verschieben in die jeweiligen Ordner.

    Montag, 9. November 2020 15:52
  • $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

    Dienstag, 10. November 2020 10:41
  • 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''

    Dienstag, 10. November 2020 11:23
  • 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-20

    Allerdings 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!

    Mittwoch, 11. November 2020 13:18