trixy19
Goto Top

Datum ab Startdatum um einen Tag erhöhen

Hallöchen,

ich habe ein kleines Problem was mich langsam verzweifeln lässt.
Ich möchte ab einem Startdatum in der Form PDATUM=20080201 Batch
ein Probramm laufen lassen und nach dem durchlauf den Tag um einen Tag erhöhen.
Bei Tag 31 soll sich der Monat erhöhen und bei Monat 12 auch das Jahr.

Das Programm was abläuft bearbeitet Dateien die z.B. so abgespeichert sind: C:\FOTO\20080201\

Hat jemand eine Idee, wie ich das automatisieren kann?

Wenn ich das mit Schleifen probiere, verschwinden die führenden Nullen, wenn ich die Variable hochzähle und da hört es bei mir irgendwie auf...

Danke und viele Grüße von Bea.

Content-Key: 91165

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

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

Member: Biber
Biber Jul 02, 2008 at 16:22:04 (UTC)
Goto Top
Moin trixy19,

willkommen im Forum.
Hier gibt es auch einige ältere und langsamere User... so wie mich zum Beispiel- denen Du bitte noch mal langsam erklären/bestätigen musst:

  • dieses Startdatum ist eine jeweils von Dir manuell festgelegte Variable ?
  • oder eine aus einem Datei/Ordner-Erstellungsdatum abzuleitende?
  • oder was genau passiert bei "einem Durchlauf"? Soll einfach nur nach dem Durchlauf eine Ausgabe erscheinen "Startdatum 20080201 - neues Datum 20080202"? Oder werden Dateien damit umbenannt oder in Ordner wegsortiert...?

Grüße
Biber
Member: bastla
bastla Jul 02, 2008 at 16:39:03 (UTC)
Goto Top
Hallo trixy19 und willkommen auch von mir!

Unabhängig davon, wo und wie Du das neue Datum einzusetzen gedenkst, würde es sich etwa so ermitteln lassen:
@echo off & setlocal
Set M=%temp%\Morgen.vbs
echo D=WScript.Arguments(0):N=DateAdd("d",1,DateSerial(Left(D,4),Mid(D,5,2),Right(D,2))):WScript.Echo Right(N,4)^&Mid(N,4,2)^&Left(N,2)>%M%  
::
:: Was halt so zu tun ist ...
::
set "PDATUM=20080101"  
::
:: Neues Datum ermitteln
::
for /f %%i in ('cscript //nologo %M% %PDATUM%') do set "PDATUM=%%i"  
echo Datum jetzt: %PDATUM%
::
Durch Verwendung der Zeile 11 erhältst Du jeweils das Datum des nächsten Tages. Wie Du es dann verwenden kannst, wäre noch aufgrund Deiner Antworten zu Bibers Fragen zu klären.

Grüße
bastla
Member: trixy19
trixy19 Jul 02, 2008 at 16:41:32 (UTC)
Goto Top
Hallo Biber,

also das Startdatum ist von mir festgelegt bzw. von den Dateiordnern die gespeichert wurden.
Das fängt irgendwann 2006 an mit den Ordnern und es ist fast täglich ein Ordner erstellt.

Mein Wegsortier Programm funktioniert schon gut, das würde ich für aktuelle Daten mit:

FOR /F "tokens=1,2,3,4 delims=/. " %%a in ('date/T') do set FOLDERDATE=%%c%%b%%a

machen wollen.
Allerdings müsste ich mit der Lösung für jeden alten Ordner das Systemdatum umstellen und das Programm von Hand starten.
Das würde ich gerne vermeiden.

Ich dachte mir ich kann diesen Ordnernamen aus drei Variablen JJ,MM,TT zusammenbauen. So war zumindest mein Plan.

Bei einem Durchlauf werden die Dateien erst an einen anderen Ort kopiert und dann umbenannt (also wegsortiert)
Member: trixy19
trixy19 Jul 02, 2008 at 17:16:38 (UTC)
Goto Top
Hallo bastla,

ich vemute das ist die Lösung. Ich werde das gleich mal in mein Programm einbauen.

Vielen Dank erstmal face-smile
Member: trixy19
trixy19 Jul 03, 2008 at 13:41:58 (UTC)
Goto Top
Hallo bastla,

also soweit ich das jetzt sehen kann funktioniert Deine Lösung spitze. Danke erstmal face-smile
Ich bekomme allerdings eine Fehlermeldung: maximale rekursionstiefe für setlocal erreicht.
Mit enabledelayedexpansion läuft das programm jetzt zwar durch, aber ich konnte nicht´s finden was
mir diese Meldung erklärt.

Hast Du eine Idee oder kennst Du den Hintergrund der Meldung?

lg bea
Member: bastla
bastla Jul 03, 2008 at 15:50:22 (UTC)
Goto Top
Hallo trixy19!

Es ist zwar spannender, zu raten, ob Du zB in statt vor einer Schleife ein "setlocal" (ohne zugehöriges "endlocal") verwendest, aber einfacher wäre es, wenn Du den Batch posten könntest (vorzugsweise zwischen < code>-Tags).

Grüße
bastla