Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Datum aus Ordnernamen auslesen

Frage Entwicklung Batch & Shell

Mitglied: Exzel

Exzel (Level 2) - Jetzt verbinden

30.03.2008, aktualisiert 17.04.2008, 6105 Aufrufe, 16 Kommentare

Hallo zusammen,

hab' eine Datensicherung per Bachtdatei erstellt. Die Ordner, in denen die Daten gesichert werden, werden mit md %date% nach dem Tagesdatum benannt. Ist es nun möglich einen Ordnernamen wie 23.03.2008 einzulesen, sieben Tage zu addieren und einen neuen Ordnernamen aus dieser Addition zu erstellen, also 30.03.2008? Natürlich müsste man immer den zuletzt erstellten Ordner ermitteln und dessen Erstelldatum um 7 Tage erhöhen.


Ordner im Sicherungslaufwerk

09.03.2008
16.03.2008
23.03.2008


Der nächste Ordner würde also 30.03.2008 heißen. Wie geht das unter der cmd.exe?

Gruß
Mitglied: Biber
31.03.2008 um 08:40 Uhr
Moin Exzel,

die Aufgabenstellung ist unklar bzw. nicht einleuchtend.

  • wenn es sich um einen Sicherungsordner handelt (evtl. auch eine automatisierte Datensicherung per TaskPlaner?), dann sollte dieser Ordner das Tagesdatum bekommen. Dafür brauchst Du keine Addition.
  • wenn Du das Datum aus den Namen der bereits vorhandenen Ordner ableiten willst, dann ist es sowohl für einen Programm-Algorithmus wie auch für die ganz normale Explorer-Namens-Sortier-Anzeige erschwerend, diesen Ordnern Namen wie "28.03.2008" zu geben. Da ist dann eine Namensgebung wie "20080328" sinnvoller und auch optisch sofort "richtig" vorhanden.

Bitte denk noch mal kurz über den Plan nach (ruhig hier im Forum).
Handwerklich ist es zwar (natürlich) machbar, aber...

Grüße
Biber
Bitte warten ..
Mitglied: Exzel
31.03.2008 um 09:42 Uhr
Danke für die Antwort,

per Taskplaner ergibt sich das Problem, sollte der Computer ausgeschaltet sein, der Task nicht nachgeholt wird, sondern erst wieder zum nächsten Sicherungstermin startet.

Per Batchdatei kann ich evtl. flexibler handeln und ich benötige keine Zusatzprogramme.

Deshalb wollte ich diesen Weg einschlagen.


Gruß
Bitte warten ..
Mitglied: Biber
31.03.2008 um 11:03 Uhr
Moin Exzel,

dann gilt aber auch, dass das Datum des Sicherungsordner gleich dem aktuellen Datum sein sollte.

Wenn du am 1. April eine Sicherung startest, dann willst Du doch wohl nicht, dass ein doofer Batch nachschauen soll, von wann wohl die letzte Sicherung ist (Beispiel: gefunden wird "16.03.2008" oder auch "28.03.2008") und 7 Tage draufschlägt.

Oder fehlt mir noch irgendein Detail Deiner Anforderung?

Grüße
Biber
Bitte warten ..
Mitglied: Exzel
31.03.2008 um 11:28 Uhr
Das Detail, was ich noch nicht klar genannt habe. Die Sicherung soll einmal in der Woche starten. Die Batchdatei würde bei jedem Start ausgeführt, auf dem Sicherungslaufwerk die Ordnernamen eingelesen werden z.B.


09.03.2008
16.03.2008
23.03.2008


und sollte mindestens eine Woche zur letzten Sicherung vergangen sein, wird ein neuer Ordner mit dem aktuellen Tagesdatum erstellt und darin die Sicherung kopiert.

Würde der Computer also heute (31.03.2008) eingeschaltete werden, würden die Ordner eingelesen und da am 23.03.2008 die letzte Sicherung durchgeführt wurde, was acht Tage Abstand bedeutet, wird ein neuer Ordner mit dem Datum 31.03.2008 erstellt und die Sicherung gestartet.

Alles klar?

Gruß
Bitte warten ..
Mitglied: Biber
31.03.2008 um 15:24 Uhr
Okay, in diesem Fall...

...dann würde ich als Kernstück der Prüfung eine Zeile temporäres VBSkript nehmen, nämlich (zum Testen):

01.
' ---------snipp ShowDaysSinceDate.vbs 
02.
'liefert Anzahl Tage von Parameter1 "Datum" bis heute zurück heute  
03.
Wscript.echo datediff("d", wscript.arguments(0), date)
-oder-
01.
' ---------snipp IsOlderAWeek.vbs  
02.
' ---> liefert TRUE/Errorlevel 0 zurück, wenn Parameter1 "Datum" älter eine Woche 
03.
Wscript.quit(datediff("d", wscript.arguments(0), date)< 7)
Du kannst also z.B. die (Pseudo-)Funktion ShowDaysSinceDate() im Batch so erzeugen und aufrufen:
01.
::----TestMyDaSi.bat 
02.
@echo off & setlocal 
03.
set "tempvbs=%temp%\ShowDaysSinceDate.vbs" 
04.
echo WScript.echo datediff("d", wscript.arguments(0), date)>"%tempvbs%" 
05.
:: Die vorhandenen DaSi-Ordnernamen einlesen sortiert nach Erzeugungsdatum; neuestes merken 
06.
For %%f %%i in ('dir /aD /o-d /b x:\DaSiRoot\??.??.????') do set "LastDaSiDir=%%~ni" 
07.
:: In %LastDaSiDir" sollte jetzt z.B. "28.03.2008" stehen 
08.
:: 
09.
:: TempVBKrams aufrufen: 
10.
For /f %%i in ('cscript //nologo "%tempvbs%" %lastDaSiDir%') do set /a AnzTage=%%i 
11.
del "%tempvbs%" 
12.
:: 
13.
:: wenn Anzahl Tage Größer gleich 7, dann neuen Ordner mit Tagesdatum anlegen. 
14.
If %AnzTage GEQ 7 md "x:\DaSiRoot\%date%" 
15.
 
16.
:: .....hier kommt der eigentliche Sicherungszirkus... 
17.
 
[ungetestete Skizze]

Grüße
Biber
Bitte warten ..
Mitglied: bastla
31.03.2008 um 15:47 Uhr
Hallo Exzel!

Alles klar?
Jetzt ja - allerdings hat sich die Aufgabenstellung gewandelt in: "Stelle fest, ob seit der letzten Sicherung mindestens 7 Tage vergangen sind."

Eine Lösung in native Batch wäre vergleichsweise aufwändig, daher eine Variante mit (eingebettetem temporärem) VBS:
01.
@echo off & setlocal 
02.
set "Sich=D:\Sicherungen" 
03.
 
04.
for /f "delims=" %%i in ('dir /b  /ad /od "%Sich%"') do set "Zuletzt=%%i" 
05.
set DD=%temp%\DateDiff.vbs 
06.
echo WScript.Echo DateDiff("d",WScript.Arguments(0),Now)>%DD% 
07.
for /f %%i in ('cscript //nologo %DD% %Zuletzt%') do set /a Tage=%%i 
08.
 
09.
echo Alter der letzten Sicherung: %Tage% Tage 
10.
if %Tage% geq 7 echo Sicherung erforderlich
Wie schon von Biber angemerkt, ist die von Dir verwendete Datumsschreibweise für Sortierungszwecke nicht wirklich geeignet, daher wird hier das Änderungsdatum der Ordner zugrundegelegt und auf Basis dessen das Alter des jüngsten Ordners in Tagen ermittelt.

Mit der skizzierten Abfrage nach >= 7 Tagen ("greater or equal") kannst Du dann, wenn erforderlich, die nächste Sicherung ausführen lassen.

Grüße
bastla

[Edit]@Biber: Na da hab' ich ja wieder ewig gebraucht - liegt sicher an der Sommerzeit, wenn Du mich an einem Montag derart abhängst ... [/Edit]
Bitte warten ..
Mitglied: Biber
31.03.2008 um 16:19 Uhr
@bastla
Na da hab' ich ja wieder ewig gebraucht..

das solltest Du gelassen sehen... andere Foren brauchen Monate für eine Lösung bei solchen Fragen.
Und hier gibts nach ein paar Stunden schon mehrere Alternativen.

Und hier wird sogar die rein handwerkliche Lösung erst dann gepostet, wenn alles versucht worden ist, zuerst das Konzeptionelle auf die richtige Schiene zu bringen.

Also - eigentlich sehe ich hier keinen Grund zur Bescheidenheit.

....obwohl.... besser werden können wir immer....

Grüße
Biber
Bitte warten ..
Mitglied: Exzel
31.03.2008 um 17:09 Uhr
Hallo Biber und Bastla,

vielen Dank für Eure Hilfe!

Leider kenn' ich mich mit VB-Script überhaupt nicht aus.


Bei einer Lösung habe ich nun den Sicherungspfad wie folgt angepasst.

01.
::----TestMyDaSi.bat 
02.
@echo off & setlocal 
03.
set "tempvbs=%temp%\ShowDaysSinceDate.vbs" 
04.
echo WScript.echo datediff("d", wscript.arguments(0), date)>"%tempvbs%" 
05.
:: Die vorhandenen DaSi-Ordnernamen einlesen sortiert nach Erzeugungsdatum; neuestes merken 
06.
For %%f %%i in ('dir /aD /o-d /b d:\??.??.????') do set "LastDaSiDir=%%~ni" 
07.
:: In %LastDaSiDir" sollte jetzt z.B. "28.03.2008" stehen 
08.
:: 
09.
:: TempVBKrams aufrufen: 
10.
For /f %%i in ('cscript //nologo "%tempvbs%" %lastDaSiDir%') do set /a AnzTage=%%i 
11.
del "%tempvbs%" 
12.
:: 
13.
:: wenn Anzahl Tage Größer gleich 7, dann neuen Ordner mit Tagesdatum anlegen. 
14.
If %AnzTage GEQ 7 md "d:\%date%" 
15.
 
Hier ist dann die VBS-Datei.
01.
' ---------snipp ShowDaysSinceDate.vbs 
02.
'liefert Anzahl Tage von Parameter1 "Datum" bis heute zurück heute  
03.
Wscript.echo datediff("d", wscript.arguments(0), date)

Führe ich nun die BAT-Datei aus, bekomme ich folgende Fehlermeldung.

"%i" ist syntaktisch an dieser Stelle nicht verarbeitbar.




Und bei der Lösung

01.
@echo off & setlocal 
02.
set "Sich=D:\" 
03.
 
04.
for /f "delims=" %%i in ('dir /b  /ad /od "%Sich%"') do set "Zuletzt=%%i" 
05.
set DD=%temp%\DateDiff.vbs 
06.
echo WScript.Echo DateDiff("d",WScript.Arguments(0),Now)>%DD% 
07.
for /f %%i in ('cscript //nologo %DD% %Zuletzt%') do set /a Tage=%%i 
08.
 
09.
echo Alter der letzten Sicherung: %Tage% Tage 
10.
if %Tage% geq 7 echo Sicherung erforderlich
erhalte ich die Fehlermeldung

Windows Script Host:

Zeile: 1
Zeichen: 1
Fehler ungültiges Zeichen



Bitte helft mir nochmals. Alleine bin ich echt verloren.


[Edit Biber] <code>-Tags ergänzt. Sonst werden 2 Backslashes interpretiert als "Beginne kursiv.." [/Edit]
Bitte warten ..
Mitglied: bastla
31.03.2008 um 18:07 Uhr
Hallo Exzel!

Anscheinend machen die "/" Probleme (insbesondere vor "nologo" sind zwei Stück davon erforderlich) ...

Hier nochmals Biber's Variante:
01.
@echo on & setlocal 
02.
set "tempvbs=%temp%\ShowDaysSinceDate.vbs" 
03.
echo WScript.echo datediff("d", wscript.arguments(0), date)>"%tempvbs%" 
04.
:: Die vorhandenen DaSi-Ordnernamen einlesen sortiert nach Erzeugungsdatum; neuestes merken 
05.
For /f %%i in ('dir /aD /od /b D:\??.??.????') do set "LastDaSiDir=%%~ni" 
06.
:: In %LastDaSiDir" sollte jetzt z.B. "28.03.2008" stehen 
07.
:: 
08.
:: TempVBKrams aufrufen: 
09.
For /f %%i in ('cscript //nologo "%tempvbs%" %lastDaSiDir%') do set /a AnzTage=%%i 
10.
del "%tempvbs%" 
11.
:: 
12.
:: wenn Anzahl Tage Größer gleich 7, dann neuen Ordner mit Tagesdatum anlegen. 
13.
If %AnzTage GEQ 7 md "D:\%date%"
und meine Version (übrigens auch ein Batch, daher mit dem Typ ".bat" oder ".cmd" zu speichern):
01.
@echo off & setlocal 
02.
set "Sich=D:\??.??.????" 
03.
 
04.
for /f "delims=" %%i in ('dir /b /ad /od "%Sich%"') do set "Zuletzt=%%i" 
05.
set DD=%temp%\DateDiff.vbs 
06.
echo WScript.Echo DateDiff("d",WScript.Arguments(0),Now)>%DD% 
07.
for /f %%i in ('cscript //nologo %DD% %Zuletzt%') do set /a Tage=%%i 
08.
 
09.
echo Alter der letzten Sicherung: %Tage% Tage 
10.
if %Tage% geq 7 echo Sicherung erforderlich
Biber hat den Quellpfad durch Festlegung eines Suchmusters für das Namensformat mit "??.??.????" genauer angegeben, während ich mich darauf verlassen hatte, dass sich im Quellordner ohnehin nur Sicherungsordner befinden - ich habe das jetzt auch bei meinem Batch sicherheitshalber noch ergänzt.

Grüße
bastla
Bitte warten ..
Mitglied: Biber
31.03.2008 um 20:03 Uhr
...ich hasse Montage....

Okay, ich habe zwar oben geschrieben "ungetestete Skizze", aber dass ich so viele Bugs auf so kleinem Raum untergebracht habe, das habe ich wirklich nicht angenommen.

Ein (ja offensichtlich leicht zu überlesender) Tippfehler steckt hier:
For %%f %%i in ('dir /aD ....
....und sollte natürlich heißen.
For /f %%i in ('dir /aD ...
Den Bug hat bastla stillschweigend geglättet.

Wo allerdings bastla auch seinen Montag mit mir teilte war....
Biber hat den Quellpfad durch Festlegung eines Suchmusters für das Namensformat mit "??.??.????" genauer angegeben, während ich mich darauf verlassen hatte, dass sich im Quellordner ohnehin nur Sicherungsordner befinden - ich habe das jetzt auch bei meinem Batch sicherheitshalber noch ergänzt.

Ja, ja... sicherheitshalber. Bringt gar nichts - schadet eher durch Vorgaukelung überlegter Programmierung.

Bug 2) Wenn doch schon klar ist, dass sich mindestens ein Punkt im (Ordner-)Gesamt-Namen befindet - wie nennt M$ die auf den letzten Punkt folgende Zeichenfolge? Richtig: Extension. Und das vor dem letzten Punkt ist der Name.
Also kommt bei meinem "Hol mir den Namen des jüngsten "??.??.????"-Verzeichnisses" heraus:
Beim Verzeichnis "28.03.2008" als Name [%%~ni]:------------> [28.03]
Bug 3) Und es kann Montags immer schlimmer kommen: Auch ein eventuell vorhandenes Verzeichnis, das nur aus ein oder zwei Zeichen besteht entspricht der vermeintlichen Genauigkeit der Suchmaske "??.??.????".
Wenn also zufällig im "Sicherungs-Root", also bei Dir auf Laufwerk D:, zwei Verzeichnisse angelegt werden mit...
md zB
md x
.... dann erwische ich die auch mit einem 'dir /ad '??.??.????'.

Der langen Schreibe kurzer Schluss:
  • Ersetze die buggybuggybuggy-Zeile
[STREICHE] For %%f %%i in ('dir /aD /o-d /b d:\??.??.????') do set "LastDaSiDir=%%~ni"
durch
[SETZE] For /f %%i in ('dir /aD /o-d /b d:\??.??.20??') do set "LastDaSiDir=%%~nxi"

Mit der Dateimaske "??.??.20??" unterstelle ich, dass Du mit den Datensicherungen jetzt anfängst, also 2008 oder so.
Und dass auch Du spätestens im Jahre 2100 keinen Wert mehr auf Archivierung Deiner Computerdaten legst.

Na ja, wahrscheinlich muss sich dann niemand von uns mehr mit M$-Programmen rumbalgen.
Weil M$ in 90 Jahren bestimmt Software zur Spracherkennung von Nicht-US-englischen Dialekten entwickelt hat..*ggg
..... ihre M$KB-Seiten übersetzen die ja jetzt schon....wohin auch immer....

Grüße und schönen Restmontag
Biber
Bitte warten ..
Mitglied: bastla
31.03.2008 um 20:23 Uhr
@Biber

Schade eigentlich - ich fand die Maske eine gute Idee (muss aber leider zugeben, dann auch nicht mehr getestet zu haben).

Den Bug 2) habe ich durch präventive Ungenauigkeit vermieden ...

Grüße
bastla

P.S.: Falls Du ein "-" vermisst - das habe ich ...
[Edit] Wie ich sehe, hattest Du noch eines vorrätig ... [/Edit]
Bitte warten ..
Mitglied: Exzel
06.04.2008 um 20:21 Uhr
Hallo nochmal und sorry für die späte Rückmeldung,

leider funktioniert das immer noch nicht genau.

Die letzte Sicherung liegt im Ordner

27.03.2008 Änderungdatum ist der 31.03.2008


Die Lösung von Biber (heute) AnzTage=76
Die Lösung von Bastla (heute) 69 Tage

Wenn ihr wollte kann ich euch die Screenshots zuschicken. Leider habe ich keine Möglichkeit gefunden hier Bilder in die Threads einzubinden.


Bitte um Hilfe!

Danke!
Bitte warten ..
Mitglied: bastla
06.04.2008 um 23:41 Uhr
Hallo Exzel!

Noch ein Versuch:
01.
@echo off & setlocal 
02.
set "Sich=D:\??.??.20??" 
03.
 
04.
for /f "delims=" %%i in ('dir /b /ad /od /tc "%Sich%"') do set "Zuletzt=%%i" 
05.
set DD=%temp%\DateDiff.vbs 
06.
echo WScript.Echo DateDiff("d",WScript.Arguments(0),Now)>%DD% 
07.
for /f %%i in ('cscript //nologo %DD% %Zuletzt%') do set /a Tage=%%i 
08.
 
09.
echo Alter der letzten Sicherung: %Tage% Tage 
10.
if %Tage% geq 7 echo Sicherung erforderlich
Sollte auch das nicht zum gewünschten Ergebnis führen, könntest Du einmal mit "Start / Ausführen..." und der Eingabe von "cmd" zur Kommandozeile gehen und dort den Befehl
01.
dir /od /tc D:\Sicherungen\??.??.20??
ausführen. Der Laufwerksbuchstabe ist natürlich, so wie auch im Batch oben, anzupassen.

Um das ausgegebene Inhaltsverzeichnis posten zu können, empfiehlt es sich, im CMD-Fenster auf die linke obere Ecke zu klicken, im erscheinenden Menü "Eigenschaften" zu wählen und dort im Register "Optionen" den "QuickEdit-Modus" zu aktivieren.

Nach "OK" und der Auswahl, die Eigenschaften "... für alle Fenster mit gleichem Namen" zu übernehmen, kannst Du bequem mit der Maus im CMD-Fenster kopieren und einfügen - dazu mit der linken Maustaste markieren und durch Rechtsklick kopieren (wenn nichts markiert ist, bewirkt ein Rechtsklick das Einfügen aus der Zwischenablage).

Kopiere bitte das gesamte Ergebnis des "dir"-Befehles und poste es zusammen mit der Ausgabe eines zweiten "dir"-Befehles, bei welchem Du das "/tc" weg und den Rest gleich lässt (mit der "Pfeil-nach-oben"-Taste kannst Du den vorigen Befehl nochmals aufrufen und auch vor dem erneuten Ausführen bearbeiten).

Grüße
bastla
Bitte warten ..
Mitglied: Exzel
07.04.2008 um 15:08 Uhr
Hallo und danke für deine Geduld,

hier die Ausgaben.


D:\>dir /od /tc D:\??.??.20??
Datenträger in Laufwerk D: ist USER_DATA
Volumeseriennummer: 8007-B192

Verzeichnis von D:\

08.02.2008 15:30 <DIR> 08.02.2008
22.02.2008 15:30 <DIR> 22.02.2008
29.02.2008 15:30 <DIR> 29.02.2008
04.03.2008 09:52 <DIR> 04.03.2008
07.03.2008 10:32 <DIR> 07.03.2008
20.03.2008 09:46 <DIR> 20.03.2008
25.03.2008 10:05 <DIR> 25.03.2008
31.03.2008 09:56 <DIR> 11.03.2008
31.03.2008 09:56 <DIR> 14.03.2008
31.03.2008 09:56 <DIR> 27.03.2008
31.03.2008 09:56 <DIR> 18.03.2008
31.03.2008 09:56 <DIR> 15.02.2008
0 Datei(en) 0 Bytes
12 Verzeichnis(se), 8.731.000.832 Bytes frei



D:\>dir /od D:\??.??.20??
Datenträger in Laufwerk D: ist USER_DATA
Volumeseriennummer: 8007-B192

Verzeichnis von D:\

08.02.2008 15:31 <DIR> 08.02.2008
22.02.2008 15:31 <DIR> 22.02.2008
29.02.2008 15:31 <DIR> 29.02.2008
04.03.2008 09:55 <DIR> 04.03.2008
07.03.2008 10:36 <DIR> 07.03.2008
20.03.2008 09:50 <DIR> 20.03.2008
25.03.2008 10:08 <DIR> 25.03.2008
31.03.2008 09:56 <DIR> 11.03.2008
31.03.2008 09:56 <DIR> 14.03.2008
31.03.2008 09:56 <DIR> 27.03.2008
31.03.2008 09:56 <DIR> 18.03.2008
31.03.2008 09:56 <DIR> 15.02.2008
0 Datei(en) 0 Bytes
12 Verzeichnis(se), 8.731.000.832 Bytes frei


Wenn es nun wirklich zu schwierig und zu aufwendig ist, den Ordner im Format dd.mm.yyyy zu speichern und es wesentlich einfacher ist yyyymmdd zu verwenden können wir auch mit diesem arbeiten. Müsste halt dann wissen, wie das Sicherungsscript aussehen müsste und mit welchem Befehl so ein Ordner angelegt wird.

Gruß
Bitte warten ..
Mitglied: bastla
07.04.2008 um 15:47 Uhr
Hallo Exzel!

Wie Du an der Auflistung erkennen kannst, gilt auf Basis der Sortierung nach Erstellungs- und auch nach Änderungsdatum der Ordner "15.02.2008" als der neueste - daher wäre eine Sortierung nach dem Namen vorzuziehen, was sich am sinnvollsten über die Änderung der Datumsschreibweise erreichen lässt.

Dazu müsstest Du Dein
01.
md %date%
zB ersetzen durch
01.
set "Datum=%date:~-4%-%date:~-7,2%-%date:~-10,2%" 
02.
"md D:\%Datum%"
Als Ziel der Sicherung kannst Du dann ebenfalls "D:\%Datum%" angeben. Das resultierende Format wäre dann zB "2008-04-07".

Der Batch zur Auswertung:
01.
@echo off & setlocal 
02.
set "Sich=D:\20??-??-*" 
03.
 
04.
for /f "tokens=1-3 delims=-" %%i in ('dir /b /ad /on "%Sich%"') do set "Zuletzt=%%k.%%j.%%i" 
05.
set DD=%temp%\DateDiff.vbs 
06.
echo WScript.Echo DateDiff("d",WScript.Arguments(0),Now)>%DD% 
07.
for /f %%i in ('cscript //nologo %DD% %Zuletzt%') do set /a Tage=%%i 
08.
 
09.
echo Alter der letzten Sicherung: %Tage% Tage 
10.
if %Tage% geq 7 echo Sicherung erforderlich
Grüße
bastla
Bitte warten ..
Mitglied: Exzel
17.04.2008 um 11:54 Uhr
Hallo nochmal,

nach langem Probieren ist es nun endlich vollbracht. Hier das fertige Script.

01.
@echo off & setlocal 
02.
 
03.
if exist "D:\%date:~6%*" goto Intervall 
04.
if not exist "D:\%date:~6%*" goto Sicherung 
05.
 
06.
 
07.
:Intervall 
08.
set "Sich=D:\20??-??-*" 
09.
for /f "tokens=1-3 delims=-" %%i in ('dir /b /ad /on "%Sich%"') do set "Zuletzt=%%k.%%j.%%i" 
10.
set DD=%temp%\DateDiff.vbs 
11.
echo WScript.Echo DateDiff("d",WScript.Arguments(0),Now)>%DD% 
12.
for /f %%i in ('cscript //nologo %DD% %Zuletzt%') do set /a Tage=%%i 
13.
echo Alter der letzten Sicherung: %Tage% Tage 
14.
if %Tage% geq 7 goto Sicherung 
15.
exit 
16.
 
17.
 
18.
:Sicherung 
19.
set "date=%date:~-4%-%date:~-7,2%-%date:~-10,2%" 
20.
md D:\%date% 
21.
echo Sicherung wird durchgefuehrt 
22.
echo Dieses Fenster schliesst nach der Sicherung automatisch 
23.
set xlog=D:\ergebnis.txt 
24.
@echo ---------------- Beginn copy %date% %time% -------------- > %xlog%  
25.
xcopy "c:\ZU_SICHERENDES_VERZEICHNIS" "d:\%date%\" /e /h /V >> %xlog% 
26.
@echo ---------------- Ende copy %date% %time% ------------
Dieses Script führt also nach spätestens 7 Tagen eine Sicherung durch. Die Protokollierung erfolgt in der Datei ergebnis.txt. Die Sicherungsverzeichnisse werden nach dem Schema JJJJ-MM-TT angelegt. Beispiel 2008-04-17. Anfangs wird überprüft, ob so ein Sicherungsverzeichnis überhaupt schon einmal angelegt ist. Wenn ja, wird die Differenz zwischen dem letzten Sicherungstag (der aus dem Ordnernamen hervorgeht) und dem heutigen berechnet. Sollte diese Differenz größer als sieben sein wird die Sicherung durchgeführt. Sollte diese kleiner sein, dann nicht. Wenn noch kein Sicherungsverzeichnis existiert wird eines neu angelegt. Dieses Script kann also in den Autostart gelegt und individuell angepasst werden.


VIELEN VIELEN VIELEN VIELEN DANK FÜR EURE HILFE! Hätte das alleine nur unter größten Anstrengungen vollbracht.

Gruß
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Mehrere Ordnernamen auslesen und in eine Variable schreiben (5)

Frage von schmitho zum Thema Batch & Shell ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Batch & Shell
gelöst Appx aus Image auslesen und entfernen (9)

Frage von Markus2016 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...