matze-pe
Goto Top

Ordnerdatum soll - 3 Tage sein

Hallo miteinander,
ich habe eine Script der mir alle Dateien bis auf die in den letzen 3 Tagen sichert.

im Script wird ein Ordner angelegt, der das heutige Datum als Ordnernamen nimmt. In dem Ordner befinden sich aber alle Dateien bis auf die in den letzen 3 Tagen.


Wie ändert man im Sckript, dass der Ordnernamen 2008_02_05 (-3 Tage) = 2008_02_02 heißt?


Hier mein Script:

@echo off & setlocal

set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%


md D:\Sicherung\bis_%jahr%-%monat%-%tag%\


set /a MindestAlter=3
set "Quelle=C:\Sicherung\*.*"  
set "Ziel=D:\Sicherung\bis_%jahr%-%monat%-%tag%\"  

set "AG=%temp%\Age.vbs"  
echo Sicherung: Fenster wird in wenigen Minuten automatisch geschlossen!
echo -----------------------------------------------------------------------

echo A=DateDiff("d", CreateObject("Scripting.FileSystemObject").GetFile(WScript.Arguments(0)).DateLastModified, Now):WScript.Echo A>"%AG%"  
for %%i in ("%Quelle%") do for /f %%a in ('cscript //nologo "%AG%" "%%i"') do if %%a gtr %MindestAlter% move "%%i" "%Ziel%\%%~ni%%~xi.txt"  
del "%AG%"  



mfg
Matze-Pe


[Edit Biber] Auf formatiert. [/Edit]

Content-Key: 79982

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

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

Member: bastla
bastla Feb 05, 2008 at 16:05:48 (UTC)
Goto Top
Hallo matze-pe!

Ich hoffe, dass es ist Dir recht ist, wenn das Ordnerdatum nicht mit -3 Tagen, sondern mit -%MindestAlter% Tagen ermittelt wird:
@echo off & setlocal
set /a MindestAlter=3
set "Quelle=C:\Sicherung\*.*"  

set "GD=%temp%\GetDate.vbs"  
echo D=DateAdd("d",-%MindestAlter%,Now):WScript.Echo Year(D)^&"_"^&Right("0"^&Month(D),2)^&"_"^&Right("0"^&Day(D),2)>"%GD%"  
for /f "tokens=1-3 delims=_" %%i in ('cscript //nologo "%GD%"') do set jahr=%%i&set monat=%%j&set tag=%%k  
del "%GD%"  

set "Ziel=D:\Sicherung\bis_%jahr%-%monat%-%tag%\"  
md "%Ziel%" 2>nul  

echo Sicherung: Fenster wird in wenigen Minuten automatisch geschlossen!
echo -----------------------------------------------------------------------

set "AG=%temp%\Age.vbs"  
echo A=DateDiff("d", CreateObject("Scripting.FileSystemObject").GetFile(WScript.Arguments(0)).DateLastModified, Now):WScript.Echo A>"%AG%"  
for %%i in ("%Quelle%") do for /f %%a in ('cscript //nologo "%AG%" "%%i"') do if %%a gtr %MindestAlter% move "%%i" "%Ziel%\%%~ni%%~xi.txt"  
del "%AG%"  

Grüße
bastla
Member: Biber
Biber Feb 05, 2008 at 17:14:37 (UTC)
Goto Top
Moin Matze-pe und bastla,

unbedeutender Vorschlag zur Vereinfachung:
Da diese Variablen %tag%, %monat% und %jahr% nun wirklich nicht benötigt werden, sondern nur EINE Variable mit dem "Heute - 3"-Verzeichnisnamen,
ginge es auch etwas schlanker...

....( Ersatzzeilen für alles zwischen [Set "GD=..."] und [md "%Ziel%" 2>nul] inkl.  
set "GD=%temp%\GetDate.vbs"  
echo Wscript.echo dateadd("d", date, -%Mindestalter%) >%GD%  
for /f "tokens=1-3 delims=." %%i in ('cscript //nologo "%GD%"') do set "Ziel=D:\Sicherung\bis_%%k-%%j-%%i"  
del "%GD%"  

md "%Ziel%" 2>nul  

...

Grüße
Biber
Member: matze-pe
matze-pe Feb 05, 2008 at 17:17:59 (UTC)
Goto Top
Hallo Bastla,

dein veränderstes Script passt nicht mehr, es kommt die Fehlermeldung:

"Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnug ist falsch.


[img]http://img212.imageshack.us/img212/6094/unbenanntki4.jpg[/img]


LG
Matze
Member: matze-pe
matze-pe Feb 05, 2008 at 17:34:36 (UTC)
Goto Top
Hallo Ihr beiden,
vielen Dank erstmal an euch beiden, aber das Probelm besteht weiterhin, das der Dateinanemn nicht stimmt, siehe screenshot^^


LG
Matze
Member: bastla
bastla Feb 05, 2008 at 17:48:37 (UTC)
Goto Top
Hallo matze-pe!

Anmerkung zu Deinem Screenshot:
Im CMD-Fenster lässt sich sehr einfach Text markieren und kopieren - dazu Rechtsklick auf das Systemmenü (ganz links in der Titelleiste) des CMD-Fensters und im Register "Optionen" den "QuickEdit-Modus" einschalten. Beim Beenden die zweite Option ("... für alle Fenster ...") wählen. Ab sofort kannst Du dann im CMD-Fenster mit der linken Maustaste markieren und durch Rechtsklick kopieren, bzw, wenn kein Text markiert ist, durch Rechtsklick den Inhalt der Zwischenablage einfügen. Dann noch den so kopierten Text zwischen -Tags stellen und posten ...

Bevor Du das ausprobierst ändere aber bitte das "@echo off" in der ersten Batchzeile auf "@echo on" - dann sieht man/frau nämlich, wodurch der Fehler ausgelöst wird.

Da ich den eigentlichen Verschiebeteil unverändert übernommen habe, kann der Fehler eigentlich nur auf den Verzeichnisnamen zurückzuführen sein - daher kannst Du wahrscheinlich schon nach den ersten 3 Dateien den Batch abbrechen.

Na ja, schaun mer mal ...
@Biber
D'accord.

Eigentlich wollte ich gleich den gesamten Datumsstring passend formatiert ausgeben (was ich ja ohnehin mache), aber dann ist mir die Diskrepanz zwischen Beschreibung (Trennzeichen "_") und "set"-Zeile (Trennzeichen "-") aufgefallen, und daher wollte ich matze-pe die "gewohnten" Variablen bieten, um sich den endgültigen Verzeichnisnamen daraus selbst zusammenzusetzen - nixdestotrotz ist natürlich Dein Vorschlag eleganter.

Grüße
bastla
Member: matze-pe
matze-pe Feb 06, 2008 at 08:29:32 (UTC)
Goto Top
Alles klar, vielen Dank.

Hat wunderbar funktioniert.


LG
Matze
Member: Biber
Biber Feb 06, 2008 at 08:41:56 (UTC)
Goto Top
Moin matze-pe,

hab ich nicht verstanden.
Was war denn nun der Unterschied zwischen dem Skript, das den Fehler oben geworfen hat und dem, das wunderbar funktioniert?

Oder noch hilfreicher für alle MitleserInnen:
poste doch bitte noch mal die Version, die jetzt tatsächlich im richtigen Leben einsetzbar ist.

Danke
Biber
Member: matze-pe
matze-pe Feb 06, 2008 at 10:24:04 (UTC)
Goto Top
Hallo,
der Fehler lag in der Pafdangabe.

Und ein kleiner Denkfehler ist noch drin, ist es möglich das Datum vom Ordner 4 Tage zurück zu setzen und die Dateien der letzten 3 Tage.

Beispiel: Heute haben wir den 6.2.08, die Dateien werden bis zum 02.02.08 gesichert und der Ordnernamen heißt bis_08-02-03


Ist es möglich das zu ändern?


Vielen Dank


LG
Matze
Member: bastla
bastla Feb 06, 2008 at 13:27:06 (UTC)
Goto Top
Hallo matze-pe!

Etwa so:
echo D=DateAdd("d",-%MindestAlter%-1,Now)...  
Damit bleibt's immer noch variabel, ansonsten einfach:
echo D=DateAdd("d",-4,Now)...  

Grüße
bastla
Member: matze-pe
matze-pe Feb 07, 2008 at 08:17:33 (UTC)
Goto Top
Wunderbar, hat geklappt

Vielen vielen Dank