@echo off
set fb=.
set dtbase_ext=gdb
set backup_ext=gbk
set dfixed_ext=recovered

if .%1==.recovery goto recovery
for %%f in (*.%dtbase_ext%) do call %0 recovery %%~nf
goto exit

:recovery
set src=%2.%dtbase_ext%
set bak=%2.%backup_ext%
set dst=%2.%dfixed_ext%

echo Сжатие и исправление %src%...

if not exist %dst% goto step1
del %dst% > nul
if exist %dst% goto exit

:step1
if not exist %dst% goto step2
del %bak% > nul
if exist %bak% goto exit

:step2
echo - отключение базы
%fb%\gfix.exe -shut -force 0 %src% -user sysdba -pass masterkey
echo - подготовка к архивированию
%fb%\gfix.exe -mend -ignore %src% -user sysdba -pass masterkey
echo - архивирование в %bak%
%fb%\gbak.exe -b %src% %bak% -user sysdba -pass masterkey
echo - восстановление в %dst%
%fb%\gbak.exe -r -rep %bak% %dst% -user sysdba -pass masterkey
echo - подключение базы
%fb%\gfix.exe -online %src% -user sysdba -pass masterkey
if not exist %dst% goto exit
echo - создание %src%
copy %dst% %src%  > nul
del %dst%  > nul

:exit
echo.