freakonaleash
Goto Top

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

Content-Key: 328449

Url: https://administrator.de/contentid/328449

Printed on: April 25, 2024 at 01:04 o'clock

Mitglied: 132272
Solution 132272 Feb 05, 2017 updated at 10:07:46 (UTC)
Goto Top
Gibt's alles schon
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!\"  
)
Gruß
Member: freakonaleash
freakonaleash Feb 05, 2017 at 11:25:21 (UTC)
Goto Top
Super! Echt genial, vielen Dank.
Member: freakonaleash
freakonaleash Feb 05, 2017 at 11:37:02 (UTC)
Goto Top
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?
Mitglied: 132272
Solution 132272 Feb 05, 2017 updated at 11:54:44 (UTC)
Goto Top
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.
Member: freakonaleash
freakonaleash Feb 05, 2017 at 11:55:48 (UTC)
Goto Top
Habe versuch mit:

if not exist "!yearfolder!\%%a" move "%%a" "!Yearfolder!\"

Ziel war es, dass erstmal nicht verschoben wird. Allerdings funktioniert das ganze nicht.
Was machen den genau die beiden Ausrufezeichen? Dachte Variabeln macht man immer mit "%" ....
Mitglied: 132272
132272 Feb 05, 2017 updated at 12:00:46 (UTC)
Goto Top
%%a enthält den ganzen Pfad du musst nur den Namen und die Dateierweiterung der Datei mit *%%~nxa nehmen.
if exist "!yearfolder!\%%~nxa" move "%%a" "!Yearfolder!\%%~na_new%%~xa" 

Schau dir bitte mal for /? an.
Mitglied: 132272
132272 Feb 05, 2017 updated at 12:05:23 (UTC)
Goto Top
Zitat von @freakonaleash:
Was machen den genau die beiden Ausrufezeichen? Dachte Variabeln macht man immer mit "%" ....
Bei delayed expansion nicht: DelayedExpansion

@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"   
        )
)
Member: freakonaleash
freakonaleash Feb 05, 2017 at 12:08:55 (UTC)
Goto Top
Ok Nochmals Danke.
Da steht vieles brauchbares drin. Will mir am nächsten Wochende sowieso mal ein vernünftiges Batch-Tutorial durchgehen. Erkenne gerade so langsam, wie mächtig das alles ist.
Mitglied: 132272
132272 Feb 05, 2017 updated at 12:21:55 (UTC)
Goto Top
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 face-wink.
Member: freakonaleash
freakonaleash Feb 05, 2017 at 14:16:36 (UTC)
Goto Top
Ok, dann wohl powershell.
hab zwar schon bisschen mit c++ programmiert und denke dass ich da wieder schnell drin bin, aber irgendwie erscheint mir sowas für solche Dateischubsereien bisschen überdimensioniert!? Oder täuche ich mich da?
Solche batch oder Powershell anwendungen kann man ja, wenn mans kann, schnell auf "jedem" Windowsrechner ohne weiteres programmieren und ausführen während man bei c++ erstmal mit IDE und compiler anfangen muss und dann ggf. noch ne menge .dll dem auszuführenden Rechner mitgeben muss.....
Mitglied: 132272
132272 Feb 05, 2017 updated at 14:38:29 (UTC)
Goto Top
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.

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.