42641
Goto Top

Ordner automatisch verschieben wenn 30 Tage oder älter

Automatisierte verschiebung von Ordnern mit einer Datumsangabe als Name

Hallo Leute

Ich habe ne kleine Aufgabe die ich aber net gebacken bekomme. Wie beim letzten Mal geht es um eine Batch datei die
etwas tun soll und dies auch in einem Log ausgeben soll.
Diesmal wäre die Aufgabe wie Folgt.
Ich habe hier ein System das Daten in Ordner packt. Nun sollen alle Ordner die älter sind als einen Monat über ein
Netzlaufwerk auf einen anderen Rechner verschoben werden.
Diese Ordner sehen wie Folgt aus :

z.b

2007_02_01_09_24_05_564

darin befinden sich die dateien.

Ordner die nicht älter als ein Monat sind sollen bleiben, ältere sollen übers Netz verschoben werden.

Dazu soll in einem Logfile mit Datum un Uhrzeit zusehen sein ob die Ordner erfolgreich oder nicht erfolgreich verschoben wurden.

Hat jemand eine Lösung ?

Ich weiß das man irgendwie den Teil von 2007 bis 01 also 2007_02_01 abprüfen muss mit dem aktuellen Datum. Der Rest dahinter
is nicht wichtig.

Bin für jede Hilfe sehr dankbar.

MfG

Thomas S.

Content-Key: 55072

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

Printed on: April 26, 2024 at 13:04 o'clock

Member: Biber
Biber Mar 26, 2007 at 16:17:00 (UTC)
Goto Top
Moin tRipleT,

das ist eigentlich nicht so aufwändig.

Wie aus einem beliebigen Windows-Anzeigedatum Tag, Monat und Jahr extrahiert werden können, haben wir schon mehrfach im Forum stehen.
Und aus Jahr/Monat/Tag bastelst Du Dir ein Ansi-Datum (Format JJJJMMTT).

Beispiel: wenn die ein "echo %date%" am CMD-Prompt zurückgäbe "26.03.2007", dann hättest Du das mit
for /f "tokens=1-3 delims=." %i in ("date") do set /a "AnsiDate=%c%b%a"
...in eine "numerische" Variable %AnsiDate% mit dem Wert 20070326 sortiert.

Wenn Deine Ordner-Konvention so ist wie beschrieben, dann bekommst Du alle diese Ordner aufgelistet mit...
dir /a:d /b ????_??_??_??*
--oder-
dir /a:d /b 200?_??_??_??*

Also kannst Du dann mit zwei weiteren Anweisung das Ganze vergleichen:
Set /a LastMonthAnsiDate=%AnsiDate% -100
for /f "tokens=1-3* delims=_" %i in ('dir /a:d /b ????_??_??_??*') do @if [%i%j%k] LEQ [%LastMonthAnsiDate%] move "%i_%j_%k_%l" x:\archiv\  
So wäre es vom CMD-Prompt.
Im Batch zwei Prozentzeichen statt einem.

[Okay, die Skizze wären nun nicht exakt 30,00 Tage.... aber vielleicht muss das auch nicht...]

Gruss Biber
Member: bastla
bastla Mar 26, 2007 at 16:50:39 (UTC)
Goto Top
Hallo tRipleT!

Und wenn's Dir das wert ist: so werden es genau 30 Tage (als Ersatz für Biber's erste Zeile verwenden):
set days=30
echo Old=DateAdd("d",-%days%,Now)>%temp%\GetOldANSIDate.vbs  
echo WScript.Echo Year(Old)^&Right("0"^&Month(Old),2)^&Right("0"^&Day(Old),2)>>%temp%\GetOldANSIDate.vbs  
for /f %%d in ('cscript //nologo %temp%\GetOldANSIDate.vbs') do set /a LastMonthAnsiDate=%%d  
del %temp%\GetOldANSIDate.vbs

Grüße
bastla
Mitglied: 42641
42641 Mar 29, 2007 at 07:53:57 (UTC)
Goto Top
Ok ich werd das mal versuchen.... thx
Member: Biber
Biber Mar 29, 2007 at 10:40:19 (UTC)
Goto Top
Moin tRipleT,

bitte gib irgendwann nach dem Testen noch mal Feedback, ob es klappt.
Und nett wäre dann auch das Posten der final version für die Nachwelt.

Danke
Biber

[Edit] 7.5.2007. Da der Threadowner inzwischen ein "abgemeldetes Mitglied" ist, wird dieses Feedback wohl leider nicht mehr kommen.
Dann schliesse ich den Thread mal.
[/Edit]