windows - Tidligere dagvariabel i en batchfil

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skal skrive en batchfil, der kalder en kommando og sender en dataparameter for den foregående dag.


Eksempel:


[[funktion]] CCYYMMDD


Jeg kan ikke synes at finde noget eksempel på dette. Og mit firma kan ikke lide at bruge freeware, så jeg har virkelig brug for løsningen til at være en rent DOS-baseret løsning.

Bedste reference


Du kan starte med Dostips: Dato og tid

Der er funktioner til at evaluere en dato til en seriel dagstælling og omvendt.

Så det resulterer i [4]


call :jdate "\%date\%" JD\_result
set /a prev\_day=JD\_result-1
call :jdate2date \%prev\_day\% YYYY MM DD
echo Previous day is \%DD\%.\%MM\%.\%YYYY\%

Andre referencer 1


Jeg kan ikke finde den oprindelige løsning, jeg havde til dette, men jeg fandt noget på Rob Van Der Woudes websted, der vil gøre jobbet pænt. [5]


Der er en fejl i filen, der bogføres der, på grund af det faktum, at SET /A vil behandle strenge, der starter med et nul som oktal, og det medfører problemer, når dag/måned datoer starter med et nul.


Hvis du får de ovennævnte filer, men ændrer koden til: JDate-proceduren (linje 157) til:


SET MonthChecker1=\%2
SET MonthChecker2=\%MonthChecker1:~0,1\%
IF \%MonthChecker2\%==0 (
  SET MonthChecker3=\%MonthChecker1:~1,1\%
) ELSE (
  SET MonthChecker3=\%MonthChecker1\%
)
SET DayChecker1=\%3
SET DayChecker2=\%DayChecker1:~0,1\%
IF \%DayChecker2\%==0 (
  SET DayChecker3=\%DayChecker1:~1,1\%
) ELSE (
  SET DayChecker3=\%DayChecker1\%
)
SET /A Month1 = ( \%MonthChecker3\% - 14 ) / 12
SET /A Year1  = \%1 + 4800
SET /A JDate  = 1461 * ( \%Year1\% + \%Month1\% ) / 4 + 367 * ( \%MonthChecker3\% - 2 -12 * \%Month1\% ) / 12 - ( 3 * ( ( \%Year1\% + \%Month1\% + 100 ) / 100 ) ) / 4 + \%DayChecker1\% - 32075
FOR \%\%A IN (Month1 Year1) DO SET \%\%A=
GOTO:EOF


Dette er testet og arbejder på en 2K8R2 boks. Det er absolut værd at bruge dette over andre løsninger derude, da det har evnen til at bestemme, hvad datformat på værtssystemet er fra registreringsdatabasen, hvilket ingen anden løsning jeg har fundet gør.