e-mexx
Goto Top

Per Batch - Datum als Ordnername (Datiensortierung in Datumsordner)

Lange ist es her, dass ich mit Batches gearbeitet habe.
Jetzt hab ich ein Problem zu loesen, dass mir viel manuelle Arbeit ersparen koennte.

Ich fand folgende aehnliche Artikel, komme damit jedoch nicht weiter!
--> "Erstellungsdatum auslesen und als neuen Dateinamen verwenden"
--> "Erstellungsdatum einer Datei per Batch auswerten?"
--> "Batch - Dateien mit Ordnernamen umbenennen"

Bisher hab ich die oben genannten Artikel versucht zu mergen, bin allerdings klaeglich gescheitert.

Nachdem ich allerdings heute bei dem schoenen Wetter den halben Sonntag verbracht habe,
ein Script zu basteln, wende ich mich an euch mit einem Hilferuf!

Ich suche eine Batch-Lösung, die sämtliche Dateien in einem Order (variabel: c:\temp\) nach Erstellungsdatum ausliest,
nach einem bestehendem Unterordner (YYYYMMDD*) im Ordner (d:\archiv\) sucht,
diesen Ordner basierend auf dem Erstellungsdatum der jeweiligen Datei erstellt, wenn noch nicht vorhanden (YYYYMMDD),
und die Dateien in die jeweiligen Ordner verschiebt.

Ich habe jeweils 1 bis x Dateien mit gleichem Datum und unterschiedlichen Zeiten und Datienamen in dem Ausgangsfolder.

Die Unterordner in d:\archiv\ werden später manuell erweitert (Bsp.: 20080315 Logfiles oder ... Mails Privat, etc.),
enthalten allerdings immer das Datum am Beginn.

Falls eine Datei nicht verschoben werden kann (weil zum Bsp. schon in einem Ordner mit dem entsprechenden Datum vorhanden), soll sie uebersprungen werden und bleibt im urspruenglichen Ordner bestehen.

Wie müsste so eine Batch aussehen?

Vielen Dank fuer eure Hilfe!

Content-Key: 91397

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

Printed on: April 19, 2024 at 23:04 o'clock

Mitglied: 67027
67027 Jul 06, 2008, updated at Oct 18, 2012 at 16:35:56 (UTC)
Goto Top
Member: miniversum
miniversum Jul 06, 2008 at 16:04:58 (UTC)
Goto Top
Versuchs mal damit:
@echo off
set "quelldir=c:\temp"  
set "zieldir=d:\archiv"  

FOR /F "delims=" %%i in ('dir /A-D /B "%quelldir%"') do FOR /F "tokens=1-3 delims=. " %%a in ('echo %%~ti') do (  

dir "%zieldir%\%%c%%b%%a*\" >NUL 2>NUL || ECHO md "%zieldir%\%%c%%b%%a\" >NUL  
if not exist "%zieldir%\%%c%%b%%a*\%%~nxi" ECHO move "%%i" "%zieldir%\%%c%%b%%a\%%~nxi"  
)

Es wird erstmal nur angezeigt was pasiert. Wenn alles so funktioniert wie du willst dann entferne die "ECHO"s einfach
Member: bastla
bastla Jul 06, 2008 at 18:52:41 (UTC)
Goto Top
@miniversum
Vielleicht besser als Zeile 5:
for /f "delims=" %%i in ('dir /a-d /b "%quelldir%"') do for /f "tokens=1-3 delims=. " %%a in ('dir /tc "%quelldir%\%%i"^|findstr /c:"%%i"') do (  
Außerdem wird
if not exist "%zieldir%\%%c%%b%%a*\%%~nxi"  
wegen des "*" nicht funktionieren ...
Grüße
bastla
Member: e-mexx
e-mexx Jul 06, 2008 at 20:04:26 (UTC)
Goto Top
Hallo tatuff, Miniversum,

Dank des Scripts von miniversum hat sich das Thema förmlich in Luft aufgelöst!

Vielen Dank nochmals!

Schöne Grüsse an die Scripting Meister!