bufferm44
Goto Top

Morgiges Datum in Batchdatei bestimmen

Hallo zusammen!

Ich bestimme mit folgenden Zeilen das aktuelle Datum:

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

echo Heute ist %wotag%, der %tag%.%monat%.%jahr%


Wie aber kann ich das morgige Datum bestimmen? Gut man könnte mit einem Haufen von IFs alle Variablen umändern (prüfen ob der letzte Tag des Monats ist usw..) aber geht das nicht auch eleganter?

Content-Key: 94064

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

Printed on: April 19, 2024 at 09:04 o'clock

Member: SarekHL
SarekHL Aug 10, 2008 at 19:04:57 (UTC)
Goto Top
Muß es Batch sein? in VB ist das absolut easy ...
Member: bastla
bastla Aug 10, 2008, updated at Oct 18, 2012 at 16:36:05 (UTC)
Goto Top
@SarekHL
Dass sich VB(S) besser als Batch dafür eignet, sehe ich genauso; deshalb habe ich da schon mal eine Kombination von beidem fabriziert ...

@bufferm44
Für die Wochentagsbestimmung wie in Deiner Zeile 5 benötigst Du aber Windows 2000, oder?

Grüße
bastla
Member: SarekHL
SarekHL Aug 10, 2008 at 19:16:47 (UTC)
Goto Top
Ja, in VB nehme ich einfach den DateAdd-Befehl. Ist ein glatter Einzeiler ;)
Member: bufferm44
bufferm44 Aug 11, 2008 at 10:16:51 (UTC)
Goto Top
Hi!

Ja, es ist ein Win2000prof-Server der das Ganze erledigen soll. Die VB-Geschichte funktioniert nicht, es wird halt der Wert aus

set "PDATUM=20080101"

ausgegeben. Gibt es irgendwo ein VB-Grundlagen-Tutorial? Oder muss ich einfach irgendwas aktivieren?

Aber ich glaube fast dass es wirklich schneller geht wenn ich schnell die letzten Tage/Monate abfrage und dementsprechend Monat/Jahr eins hochsetze und alle 4 Jahre mal manuell beim Februar eingreife ;)

Trotzdem Danke schon mal...
Member: bastla
bastla Aug 11, 2008 at 10:29:20 (UTC)
Goto Top
Hallo bufferm44!

Die angesprochene VB-Geschichte ist ein Batch face-wink und könnte (etwas angepasst) so verwendet werden:
@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%  
for /f %%i in ('cscript //nologo %M% %date:~-4%%date:~-7,2%%date:~-10,2%') do set "Morgen=%%i"  
echo Morgen: %Morgen%
Grüße
bastla
Member: bufferm44
bufferm44 Aug 12, 2008 at 18:35:46 (UTC)
Goto Top
Hi Bastla, jo das funktioniert,

hier noch mal die zwischendurch gebaute "hässliche" Variante ;)

Ok, alle 4 Jahre gibts ein Problem aber das mach ich dann manuell *gg

Thx und gelöst...

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

set korrektur=false

set tag28=false
IF not %tag%==28 goto :notag28
IF %monat%==02 set monat=03& set tag=01& set korrektur=true
:notag28

set tag30=false
IF not %tag%==30 goto :notag30
IF %monat%==04 set monat=05& set tag=01& set korrektur=true
IF %monat%==06 set monat=06& set tag=01& set korrektur=true
IF %monat%==09 set monat=10& set tag=01& set korrektur=true
IF %monat%==11 set monat=12& set tag=01& set korrektur=true
:notag30

set tag31=false
IF not %tag%==31 goto :notag31
IF %monat%==01 set monat=02& set tag=01& set korrektur=true
IF %monat%==03 set monat=04& set tag=01& set korrektur=true
IF %monat%==05 set monat=06& set tag=01& set korrektur=true
IF %monat%==07 set monat=08& set tag=01& set korrektur=true
IF %monat%==08 set monat=09& set tag=01& set korrektur=true
IF %monat%==10 set monat=11& set tag=01& set korrektur=true
IF %monat%==12 set monat=01& set tag=01& set /a jahr+=1& set korrektur=true
:notag31

IF not "%korrektur%"=="true" set /a tag+=1  
Member: bastla
bastla Aug 12, 2008 at 19:21:53 (UTC)
Goto Top
Hallo bufferm44!

Damit das Problem mit den 4 Jahren denn doch nicht eintritt face-wink:
set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%
set /a Schaltjahr=%jahr%%%4
if %jahr:~-2%==00 set /a Schaltjahr+=%Jahr:~,2%%%4

set korrektur=false

IF %tag%==28 IF %Schaltjahr% neq 0 if %monat%==02 set monat=03& set tag=01& set korrektur=true

IF %tag%==29 IF %monat%==02 set monat=03& set tag=01& set korrektur=true

IF not %tag%==30 goto :notag30
IF %monat%==04 set monat=05& set tag=01& set korrektur=true
IF %monat%==06 set monat=06& set tag=01& set korrektur=true
IF %monat%==09 set monat=10& set tag=01& set korrektur=true
IF %monat%==11 set monat=12& set tag=01& set korrektur=true
:notag30

IF not %tag%==31 goto :notag31
IF %monat%==01 set monat=02& set tag=01& set korrektur=true
IF %monat%==03 set monat=04& set tag=01& set korrektur=true
IF %monat%==05 set monat=06& set tag=01& set korrektur=true
IF %monat%==07 set monat=08& set tag=01& set korrektur=true
IF %monat%==08 set monat=09& set tag=01& set korrektur=true
IF %monat%==10 set monat=11& set tag=01& set korrektur=true
IF %monat%==12 set monat=01& set tag=01& set /a jahr+=1& set korrektur=true
:notag31

IF "%korrektur%"=="true" goto :fertig  
set /a tag=1%tag%+1
set "tag=%tag:~-2%"  

:fertig
Grüße
bastla

[Edit]
Verwendung der 4-stelligen Jahreszahl (Umwandlung auf 2-stellig ist einfacher als umgekehrt)
Korrektur der Tageberechnung - damit's nicht schon am 8. eines Monats das erste Problem gibt face-wink
Berücksichtigung der Schaltjahre über 2096 hinaus - man kann ja nie wissen ... face-wink
[/Edit]