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-ID: 79982

Url: https://administrator.de/forum/ordnerdatum-soll-3-tage-sein-79982.html

Ausgedruckt am: 23.12.2024 um 18:12 Uhr

bastla
bastla 05.02.2008 um 17:05:48 Uhr
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
Biber
Biber 05.02.2008 um 18:14:37 Uhr
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
matze-pe
matze-pe 05.02.2008 um 18:17:59 Uhr
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
matze-pe
matze-pe 05.02.2008 um 18:34:36 Uhr
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
bastla
bastla 05.02.2008 um 18:48:37 Uhr
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
matze-pe
matze-pe 06.02.2008 um 09:29:32 Uhr
Goto Top
Alles klar, vielen Dank.

Hat wunderbar funktioniert.


LG
Matze
Biber
Biber 06.02.2008 um 09:41:56 Uhr
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
matze-pe
matze-pe 06.02.2008 um 11:24:04 Uhr
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
bastla
bastla 06.02.2008 um 14:27:06 Uhr
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
matze-pe
matze-pe 07.02.2008 um 09:17:33 Uhr
Goto Top
Wunderbar, hat geklappt

Vielen vielen Dank