Tilføjelse af dato til filnavn i Windows-batch

Indlæg af Hanne Mølgaard Plasc

Problem




Jeg forsøger at tilføje i gårs dato til en zip-fil ved hjælp af winzip.
Men jeg har problemer med at få den korrekte datoformatering.

Jeg har fundet scriptet


@echo off

set yyyy=
set $tok=1-3
for /f "tokens=1 delims=.:/-, " \%\%u in ('date /t') do set $d1=\%\%u
if "\%$d1:~0,1\%" GTR "9" set $tok=2-4
for /f "tokens=\%$tok\% delims=.:/-, " \%\%u in ('date /t') do (
 for /f "skip=1 tokens=2-4 delims=/-,()." \%\%x in ('echo.^|date') do (
    set \%\%x=\%\%u
    set \%\%y=\%\%v
    set \%\%z=\%\%w
    set $d1=
    set $tok=
 )
)

if "\%yyyy\%"=="" set yyyy=\%yy\%
if /I \%yyyy\% LSS 100 set /A yyyy=2000 + 1\%yyyy\% - 100

set CurDate=\%mm\%/\%dd\%/\%yyyy\%

set dayCnt=\%1
if "\%dayCnt\%"=="" set dayCnt=1

REM Substract your days here
set /A dd=1\%dd\% - 100 - \%dayCnt\%
set /A mm=1\%mm\% - 100

:CHKDAY
if /I \%dd\% GTR 0 goto DONE
set /A mm=\%mm\% - 1
if /I \%mm\% GTR 0 goto ADJUSTDAY
set /A mm=12
set /A yyyy=\%yyyy\% - 1

:ADJUSTDAY
if \%mm\%==1 goto SET31
if \%mm\%==2 goto LEAPCHK
if \%mm\%==3 goto SET31
if \%mm\%==4 goto SET30
if \%mm\%==5 goto SET31
if \%mm\%==6 goto SET30
if \%mm\%==7 goto SET31
if \%mm\%==8 goto SET31
if \%mm\%==9 goto SET30
if \%mm\%==10 goto SET31
if \%mm\%==11 goto SET30
REM ** Month 12 falls through

:SET31
set /A dd=31 + \%dd\%
goto CHKDAY

:SET30
set /A dd=30 + \%dd\%
goto CHKDAY

:LEAPCHK
set /A tt=\%yyyy\% \%\% 4
if not \%tt\%==0 goto SET28

set /A tt=\%yyyy\% \%\% 100
if not \%tt\%==0 goto SET29

set /A tt=\%yyyy\% \%\% 400
if \%tt\%==0 goto SET29

:SET28
set /A dd=28 + \%dd\%
goto CHKDAY

:SET29
set /A dd=29 + \%dd\%
goto CHKDAY

:DONE
if /I \%mm\% LSS 10 set mm=0\%mm\%
if /I \%dd\% LSS 10 set dd=0\%dd\%

echo Date \%dayCnt\% day(s) before \%CurDate\% is \%dd\%\%mm\%\%yyyy\%

pause


Dette script viser året som YYYY, hvilket resulterer i en udgang på DDMMYYYY, hvor skal jeg ændre for at få DDMMYY i stedet? Eller har nogen en nemmere måde at tilføje DDMMYY (1 dag før nuværende dato) til et filnavn?


Tak på forhånd!

Bedste reference


Batchfilen nedenfor tilføjer 1 dag til den aktuelle dato og viser den i det ønskede format:


@echo off
setlocal EnableDelayedExpansion
set i=0
for \%\%d in (31 28 31 30 31 30 31 31 30 31 30 31) do (
   set /A i+=1
   set days[!i!]=\%\%d
)
for /F "tokens=1-3 delims=/" \%\%a in ("\%date\%") do (
   set /A dd=10\%\%a \%\% 100+1, mm=10\%\%b \%\% 100, yy=\%\%c \%\% 100, yyMOD4=yy \%\% 4
)
if \%yyMOD4\% equ 0 set days[2]=29
if \%dd\% gtr !days[\%mm\%]! (
   set /A dd=1, mm+=1
   if !mm! gtr 12 (
      set /A mm=1, yy+=1
   )
)
if \%dd\% lss 10 set dd=0\%dd\%
if \%mm\% lss 10 set mm=0\%mm\%
set tomorrow=\%dd\%\%mm\%\%yy\%
echo \%tomorrow\%
REM ren oldname.ext oldname-\%tomorrow\%.ext


Denne Batch-fil antager, at echo \%date\% viser datoen i DD/MM/ÅÅÅÅ-format. Hvis ikke, er en lille ændring nødvendig.