Skript soll Dateien in "Monats" Ordner kopieren
Ziel:
Alle Dateien die innerhalb des letzten Monats erstellt wurden in einen Ordner kopieren der den Namen des aktuellen Monats traegt.
Problem:
Habe ein Skript gebastelt das zum einen einen aktuellen Monats Ordner erstellt, soweit so gut.
Da nicht jeder Monat 30 Tage hat kann ich mit dem Flag /D nichts anfangen.
Frage:
Wie muss ich das Skript anpassen sodass alle files des aktuellen Monats ausgewaehlt werden, egal wie lange dieser ist ?
Alle Dateien die innerhalb des letzten Monats erstellt wurden in einen Ordner kopieren der den Namen des aktuellen Monats traegt.
Problem:
Habe ein Skript gebastelt das zum einen einen aktuellen Monats Ordner erstellt, soweit so gut.
Da nicht jeder Monat 30 Tage hat kann ich mit dem Flag /D nichts anfangen.
Frage:
Wie muss ich das Skript anpassen sodass alle files des aktuellen Monats ausgewaehlt werden, egal wie lange dieser ist ?
set datetimef=%date:~-4%-%date:~3,2%
if not exist "\\sharename\folder\%datetimef%" mkdir "\\sharename\folder \%datetimef%"
forfiles -p "\\sharename\folder\source" -s -m *.xml /D -30 /C "cmd /c copy @file "\\sharename\folder\%datetimef%"
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 290385
Url: https://administrator.de/contentid/290385
Ausgedruckt am: 25.11.2024 um 13:11 Uhr
11 Kommentare
Neuester Kommentar
Powershell z.B.
Gruß grexit
# Zielordner erstellen im Format YYYYMM
$target = "\\sharename\folder\$(get-date -F 'yyyyMM')"
# Wenn Zielordner noch nicht existiert erstelle ihn
if (!(Test-Path $target)){md $target}
# Suche alle *.xml Dateien in allen Unterordnern des Quellordners welche keine Ordner sind und deren Erstelldatum >= dem ersten des aktuellen Monats ist und kopiere diese in den Zielordner
gci '\\sharename\folder\source' -Filter *.xml -recurse | ?{!$_.PSIsContainer -and $_.CreationTime -ge (get-date "01.$((get-date).Month)")} | copy-item -Destination $target -Force
Zitat von @agnostiker:
Hi, danke Grexit, kannst Du mir kurz erklaeren welches flag da was genau macht ?!..
Kommentare sind oben im Code hinzugefügtHi, danke Grexit, kannst Du mir kurz erklaeren welches flag da was genau macht ?!..
Zitat von @agnostiker:
Wenn ich die Daten fuer Dezember aufbereiten muesste, wuerde ich das Script am 1.1. laufen lassen, alle files kleiner des aktuellen Tages wuerden selektiert und verschoben, richtig ?
Nein hier muss das Skript im selben Monat "wie du ja sagtest" laufen gelassen werden, kann man aber leicht anpassen wie man will, in dem man das get-date anpasst.Wenn ich die Daten fuer Dezember aufbereiten muesste, wuerde ich das Script am 1.1. laufen lassen, alle files kleiner des aktuellen Tages wuerden selektiert und verschoben, richtig ?
Ich sag doch lässt sich einfach anpassen ...Für deinen gewünschten Fall heißt die letzte Zeile des obigen Skripts so:
gci '\\sharename\folder\source' -Filter *.xml -recurse | ?{!$_.PSIsContainer -and $_.CreationTime -ge (get-date "01.$((get-date).AddMonths(-1).toString('MM.yyyy'))")} | copy-item -Destination $target -Force
logisch ...
Get-Date
Get-Date
Ja, aber müssen wir hier echt alles bis ins Fitzelchen vorbeten ??
Doku lesen kannst du oder ?
Also dann nochmal zusammengefasst:
Damit sollte das Thema gegessen sein.
$target = "\\sharename\folder\$((get-date).AddMonths(-1).toString('yyyyMM'))"
Doku lesen kannst du oder ?
Also dann nochmal zusammengefasst:
# Zielordner erstellen im Format YYYYMM
$target = "\\sharename\folder\$(get-date).AddMonths(-1).toString('yyyyMM')"
# Wenn Zielordner noch nicht existiert erstelle ihn
if (!(Test-Path $target)){md $target}
# Suche alle *.xml Dateien in allen Unterordnern des Quellordners welche keine Ordner sind und deren Erstelldatum >= dem ersten des letzten Monats ist und kopiere diese in den Zielordner
$min = get-date "01.$((get-date).AddMonths(-1).toString('MM.yyyy')")
$max = $min.AddMonths(1)
gci '\\sharename\folder\source' -Filter *.xml -recurse | ?{!$_.PSIsContainer -and $_.CreationTime -ge $min -and $_.CreationTime -lt $max} | copy-item -Destination $target -Force