Batch Datum in Format JJJJMMTT 2-stellig addieren

balcanlar

Newbie
Registriert
März 2015
Beiträge
2
Hallo,

habe folgendes Problem und brauche eine Lösung.

Ich möchte in Format JJJJMMTT den TT 2-stellig addieren können.

Sobald ich folgende Variablen setzte, wird einstellig addiert.

set jahr=2015
set monat=01
set tag=01

Zusätzlich wenn ich für set tag=08 eingebe, bekomme ich folgenden Fehler.

Ungültige Zahl. Numerische Konstanten sind entweder dezimale <17>,
hexadezimale <0x11> oder oktale <021> Zahlen.

Danke im Voraus
balcanlar

----------------------------------------------------------------------------------------

Hierzu mein Batch
@echo off

set jahr=2015
set monat=01
set tag=01
echo.

:loop

rem pause

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=07& 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%==08 set monat=09& set tag=01& set korrektur=true
IF %monat%==07 set monat=08& 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=%tag%+1
set "tag=%tag:~-2%"

:fertig
echo %jahr%.%monat%.%tag%
IF %jahr%%monat%%tag%==20150120 goto beenden
goto loop
:beenden
pause
 
Willkommen bei Batch...
eine Zahl, die mit 0 beginnt wird als Oktalzahl interpretiert. Oktalformat zählt von 0 bis 7, anschließend wird die zahl 2 stellig... im
dezimalsystem wäre das: 0,1,2,3,4,5,6,7,10,11,12,13,14,15,16,17,20,....

D.h. für berechnungen musst die variablen umrechnen für zahlen, die mit 0 anfangen, sprich alles unter 10:
Du muss zB per IF die Variable so umschreiben dass die null wegfällt.
Wenn %TAGROH% = 07 dann %TAG% = 7
Das kann man auch eleganter lösen als mit 20 IFs nur für die Oktalzahl-Umrechnung, aber das ist die einfachste Variante.
Schöner wäre zB: ein IF, wenn die erste Ziffer von Tag 0 ist, nur die 2 Ziffer von Tag heranziehen für die Variable oder noch besser mit etwas Mathe: die erste Ziffer von %Tag% * 10 + die zweite Ziffer von %TAG% = %TAG%

MfG, Thomas
 
Hallo Thomas,

nach deinem Input habe ich mich auch ein bisschen schlauer gemacht und konnte mein Problem lösen.

Danke und Gruß und schönes Wochenende
Sinan

Hier meine Lösung:

@echo off

set jahr=2016
set monat=02
set "tag=26"
echo %jahr%.%monat%.%tag%

IF %tag%==10 goto :weiter
IF %tag%==20 goto :weiter
IF %tag%==30 goto :weiter
set "tagX=%tag%"
set tagx=%tagx:0=%
set /A tag=%tagX%
:weiter
echo.

:loop

pause

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=1& set korrektur=true
IF %tag%==29 IF %monat%==02 set monat=03& set tag=1& set korrektur=true

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

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

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

:fertig
set "tagX=0%tag%"
set "tagX=%tagx:~-2%"
echo %jahr%.%monat%.%tagx%
IF "%jahr%%monat%%tagx%"=="20160304" goto beenden
goto loop
:beenden
pause
 
Zurück
Oben