Dateien in Ordner verschiebenm abhängig vom Jahr des Änderungsdatums
Hallo zusammen.
ich verwende derzeit eine einfach Batch, bei der ich alle .zip Dateien des Ordners in einen Archiv-Ordner verschiebe.
Befehl ist:
move *.zip zip_archiv\
Jetzt möchte ich allerdings, dass die Batch das Jahr des Änderungsdatum der Dateien prüft. Ist das Jahr 2016, soll die Datei in den Ordner zip_archiv\2016 geschoben werden. Wenn das Änderungsjahr 2012 ist, dann in den Ornder zip_archiv\2012 usw. usw.
Zusätzlich möchte ich nicht alle Jahresordner im voraus erstellen, diese sollen erst (automatisch) erstellt werden, wenn es die erste Datei mit dem jeweiligen Jahr gibt.
Kann mir jemand dabei behilflich sein?
Vielen Dank
ich verwende derzeit eine einfach Batch, bei der ich alle .zip Dateien des Ordners in einen Archiv-Ordner verschiebe.
Befehl ist:
move *.zip zip_archiv\
Jetzt möchte ich allerdings, dass die Batch das Jahr des Änderungsdatum der Dateien prüft. Ist das Jahr 2016, soll die Datei in den Ordner zip_archiv\2016 geschoben werden. Wenn das Änderungsjahr 2012 ist, dann in den Ornder zip_archiv\2012 usw. usw.
Zusätzlich möchte ich nicht alle Jahresordner im voraus erstellen, diese sollen erst (automatisch) erstellt werden, wenn es die erste Datei mit dem jeweiligen Jahr gibt.
Kann mir jemand dabei behilflich sein?
Vielen Dank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 328449
Url: https://administrator.de/forum/dateien-in-ordner-verschiebenm-abhaengig-vom-jahr-des-aenderungsdatums-328449.html
Ausgedruckt am: 15.05.2025 um 10:05 Uhr
11 Kommentare
Neuester Kommentar

Gibt's alles schon
Musterlösungen: Dateien verschieben abhängig vom Teil des Dateinamens
Gruß
Musterlösungen: Dateien verschieben abhängig vom Teil des Dateinamens
@echo off &setlocal ENABLEDELAYEDEXPANSION
set "folder=C:\zip_archiv"
for %%a in ("%folder%\*.zip") do (
set "datum=%%~ta" & set "yearfolder=%folder%\!datum:~6,4!"
if not exist "!yearfolder!" md "!yearfolder!"
move "%%a" "!Yearfolder!\"
)

Zitat von @freakonaleash:
Ach noch eine "Zusatzfrage":
Als zusätzliche Sicherung möchte ich, dass, wenn eine Datei die verschoben wird, schon vorhanden ist, entweder die Batch abbricht mit Hinweis oder besser: die Datei verschiebt, aber umbennt (bsp. *_neu.zip)
Geht sowas auch?
Klar, prüfe es einfach mit if exist wie oben schon gezeigt.Ach noch eine "Zusatzfrage":
Als zusätzliche Sicherung möchte ich, dass, wenn eine Datei die verschoben wird, schon vorhanden ist, entweder die Batch abbricht mit Hinweis oder besser: die Datei verschiebt, aber umbennt (bsp. *_neu.zip)
Geht sowas auch?

%%a enthält den ganzen Pfad du musst nur den Namen und die Dateierweiterung der Datei mit *%%~nxa nehmen.
Schau dir bitte mal for /? an.
if exist "!yearfolder!\%%~nxa" move "%%a" "!Yearfolder!\%%~na_new%%~xa"
Schau dir bitte mal for /? an.

Zitat von @freakonaleash:
Was machen den genau die beiden Ausrufezeichen? Dachte Variabeln macht man immer mit "%" ....
Bei delayed expansion nicht: DelayedExpansionWas machen den genau die beiden Ausrufezeichen? Dachte Variabeln macht man immer mit "%" ....
@echo off &setlocal ENABLEDELAYEDEXPANSION
set "folder=C:\zip_archiv"
for %%a in ("%folder%\*.zip") do (
set "datum=%%~ta" & set "yearfolder=%folder%\!datum:~6,4!"
if not exist "!yearfolder!" md "!yearfolder!"
if not exist "!yearfolder!\%%~nxa" (
move "%%a" "!yearfolder!\"
) else (
move "%%a" "!Yearfolder!\%%~na_new%%~xa"
)
)

Zitat von @freakonaleash:
Will mir am nächsten Wochende sowieso mal ein vernünftiges Batch-Tutorial durchgehen. Erkenne gerade so langsam, wie mächtig das alles ist.
Würde dir eher empfehlen gleich mit Powershell oder einer richtigen Programmiersprache weiterzumachen als mit dem verbuggten Mist aus den 80ern. "Mächtig" ist definitiv was anderes Will mir am nächsten Wochende sowieso mal ein vernünftiges Batch-Tutorial durchgehen. Erkenne gerade so langsam, wie mächtig das alles ist.

Zitat von @freakonaleash:
aber irgendwie erscheint mir sowas für solche Dateischubsereien bisschen überdimensioniert!?
Logisch das man das nur für größere Aufgaben hernimmt.aber irgendwie erscheint mir sowas für solche Dateischubsereien bisschen überdimensioniert!?
PS ist für solche schnellen Tasks perfekt.
Aber C# zu beherrschen nutzt dir bei der PS ebenfalls, da du dort auch reinen C# Code in den PS-Code einbauen kannst und somit Dinge erreichen kannst die mit reinem PS-Code nicht möglich wären.