@echo off

REM path bin postgres
set PATHPOSTGRESBIN=C:\Program Files\PostgreSQL 1C\10\bin

REM path backup 
set PATHPOSTGRESBACKUP=E:\Arhiv

REM name dump file
set NAMEPGDUMP=pg_dump.exe

REM user database 
set USERDATABASE=postgres

SET PGPASSWORD=Qwerty1234

REM number day for delete old bachup
set NUMBERDAYBACKUP=20
    
    call:GETNAMES %NUMBERDAYBACKUP%

    REM name backup file
    set NAMEFILEBACKUP=basename1%DATECUR%.dump
    REM name delete backup file
    set NAMEDELFILEBACKUP=basename1%DATEMINUS%.dump

    call:PRINTPARAM
    call:CREATEDUMP
    call:DELETEOLDDUMP

goto:eof


:CREATEDUMP

    @echo on
    "%PATHPOSTGRESBIN%\%NAMEPGDUMP%" -F c -b -v -f "%PATHPOSTGRESBACKUP%\%NAMEFILEBACKUP%" -U %USERDATABASE% -w postbase1s

goto:eof


:PRINTPARAM

    echo path bin postgres %PATHPOSTGRESBIN%
    echo name dump file %NAMEPGDUMP%
    echo path backup %PATHPOSTGRESBACKUP%
    echo name backup file %NAMEFILEBACKUP%
    echo user database %USERDATABASE%
    echo name delete backup file %NAMEDELFILEBACKUP%

goto:eof


:DELETEOLDDUMP

    del /Q "%PATHPOSTGRESBACKUP%\%NAMEDELFILEBACKUP%"

goto:eof


:GETNAMES

    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=
            set yy=%%w
            set dd=%%u
            set mm=%%v))

    if "%yyyy%"=="" set yyyy=%yy%
    if /I %yyyy% LSS 100 set /A yyyy=2000 + 1%yyyy% - 100

    set DATECUR=%dd%%mm%%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%

        set DATEMINUS=%dd%%mm%%yyyy%

goto:eof