@echo off setlocal ENABLEDELAYEDEXPANSION rem !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! rem !! Собственно, главные переменные... !! rem !! еще не сообразил, как их "правильно передать"... !! rem !! но... В принципе - 3 строчки можно подпрравить и руками... !! rem !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Set OldBase=D:\DOMINO\DATABASE\ИмяКаталогаСтаройБазы Set NewBase=E:\DATABASE\ИмяКаталогаНовойБазы Set Error_File=Err.txt rem OldBase - указывает, где лежит текущая база rem NewBase - указывает, куда будем класть новую rem Error_File - имя файла "ошибок" rem - а дальше рекурсивно идем по "текущей базе", rem создаем ее полный аналог по структуре и rem файлы Btrieve - переводим в новый формат rem прочие файлы - просто копируем.... rem глубина "вложенности" для самого "глубоко зарытого" файла rem - не более 10 уровней... if exist %Error_File% del /Q %Error_File% FOR /F "tokens=1-10 delims=" %%b IN ('echo %OldBase%') DO ( if "%%k"=="" set /A max_num=9 if "%%j"=="" set /A max_num=8 if "%%i"=="" set /A max_num=7 if "%%h"=="" set /A max_num=6 if "%%g"=="" set /A max_num=5 if "%%f"=="" set /A max_num=4 if "%%e"=="" set /A max_num=3 if "%%d"=="" set /A max_num=2 if "%%c"=="" set /A max_num=1 ) rem echo %max_num% if NOT EXIST %NewBase% ( md %NewBase% if not ERRORLEVEL=0 ( echo Ошибка при создании выходного каталога %NewBase% echo Работа - закончена неудачно! GOTO _EOF ) ) else ( echo Выходной каталога %NewBase% уже существует echo Работа - закончена неудачно! GOTO _EOF ) FOR /R %OldBase% %%a IN (.) DO CALL :_SubCat %%a type err.txt GOTO :_EOF :_SubCat Set OldPath=%1 Set NewPath=%OldPath:~0,-1% rem echo Работаю с путем %NewPath% rem pause FOR /F "tokens=1-10 delims=" %%b IN ('echo %NewPath%') DO ( if "%%k"=="" set /A tek_num=9 if "%%j"=="" set /A tek_num=8 if "%%i"=="" set /A tek_num=7 if "%%h"=="" set /A tek_num=6 if "%%g"=="" set /A tek_num=5 if "%%f"=="" set /A tek_num=4 if "%%e"=="" set /A tek_num=3 if "%%d"=="" set /A tek_num=2 if "%%c"=="" set /A tek_num=1 ) IF %tek_num% GTR %max_num% ( FOR /F "tokens=%max_num%,* delims=" %%b IN ('echo %NewPath%') DO ( set NewNewFold=%NewBase%\%%c md !NewNewFold! if not ERRORLEVEL=0 ( echo Ошибка при создании выходного каталога %NewNewFold% echo Работа - закончена неудачно! GOTO _EOF ) ) ) for %%l in (%NewPath%*.*) do ( call butil -STAT %%l >nul if !errorlevel!==0 ( rem файл - Btrieve, Всё нормально!! rem !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! rem !! Ну, можно поставить еще проверки на правильность "клонирования", !! rem !! но уже лень... !! rem !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! rem Что-бы было "не скучно" - выведем имя файла echo Работаю с файлом %%l rem !!!! butil -CLONE !NewNewFold!\%%~nl.dat %%l >nul rem !!!! BUTIL -SAVE %%l !NewNewFold!\%%~nl.txt >nul rem !!!! BUTIL -LOAD !NewNewFold!\%%~nl.txt !NewNewFold!\%%~nl.dat >nul del /Q !NewNewFold!\%%~nl.txt rem !!!! ) else ( echo Работаю с файлом %%l echo Файл %%l - не файл Btrieve!!! >> %Error_File% rem На всякий случай - их просто копируем в новый каталог if "!NewNewFold!"=="" ( copy %%l %NewBase% >nul ) else ( copy %%l !NewNewFold!%%~nxl >nul ) ) ) :_EOF
integer ФлагУдаления = 0; Дата.Запросить_Интервал; ВЫБОР.ИНИЦИАЛИЗАЦИЯ(0); ВЫБОР.ДОБАВИТЬ_СТРОКУ('Не удаляем'); ВЫБОР.ДОБАВИТЬ_СТРОКУ('Удаляем'); Case ВЫБОР.ВЫБРАТЬ(0,'Чистим протокол за период с '+Sformat(Дата.Начальная,'D10')+' по '+Sformat(Дата.Конечная,'D10')+'?') { of 1: ФлагУдаления = 0; of 2: ФлагУдаления = 1; else Halt; }; if ФлагУдаления = 1 { Select Протокол.ЗаПериод { after Протокол.ЗаПериод.Запись: Протокол.Удалить(); }; }