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

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

Ausgedruckt am: 21.11.2024 um 22:11 Uhr

SarekHL
SarekHL 10.08.2008 um 21:04:57 Uhr
Goto Top
Muß es Batch sein? in VB ist das absolut easy ...
bastla
bastla 10.08.2008, aktualisiert am 18.10.2012 um 18:36:05 Uhr
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
SarekHL
SarekHL 10.08.2008 um 21:16:47 Uhr
Goto Top
Ja, in VB nehme ich einfach den DateAdd-Befehl. Ist ein glatter Einzeiler ;)
bufferm44
bufferm44 11.08.2008 um 12:16:51 Uhr
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...
bastla
bastla 11.08.2008 um 12:29:20 Uhr
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
bufferm44
bufferm44 12.08.2008 um 20:35:46 Uhr
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  
bastla
bastla 12.08.2008 um 21:21:53 Uhr
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]