@echo off

REM path bin postgres
set PATHPOSTGRESBIN=%ProgramFiles(x86)%\PostgreSQL\9.0-eter1\bin

REM path backup 
set PATHPOSTGRESBACKUP=C:\dump

REM name dump file
set NAMEPGDUMP=pg_dumpall.exe

REM user database 
set USERDATABASE=postgres

REM number day for delete old bachup
set NUMBERDAYBACKUP=3
	
	call:GETNAMES %NUMBERDAYBACKUP%

	REM name backup file
	set NAMEFILEBACKUP=bu%DATECUR%.sql
	REM name delete backup file
	set NAMEDELFILEBACKUP=bu%DATEMINUS%.sql

	call:PRINTPARAM
	call:CREATEDUMP
	call:DELETEOLDDUMP

goto:eof


:CREATEDUMP

	@echo on
	"%PATHPOSTGRESBIN%\%NAMEPGDUMP%" -f "%PATHPOSTGRESBACKUP%\%NAMEFILEBACKUP%" -U %USERDATABASE% -w
	@echo off

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
