В стандартной поставке архивирование базы данных делается с помощью архиватора ARJ32
При этом имя файла выглядит так Pггммдд.ARJ (где гг - последние две цифры года, мм - две цифры месяца, дд - день месяца).
Это вызывает пару неудобств.
1. Если в день несколько раз завершать работу APUVWIN - сохраняется только последняя версия архива.
2. Архивация проходит достаточно медленно.
Поскольку в поставке apuvwin уже используется модули архиватора 7zip (для работы со служебными файлами при отправке-получении), можно использовать его для штатного архивирования базы.
Для этого сделаем изменение для файла ARXIV.BAT Вот его "исходная версия"
Учтите, что для командных файлов windows обычно используется DOS кодировка
@echo off rem rem На входе необходимо задать два параметра: rem 1-й параметр это имя архива (Pггммдд.ARJ) rem 2-й параметр это путь к базе данных (C:\APUVWIN\DBF\) rem if %1.==. goto NOPARAM arj32 a %1 %2*.dbf %2*.cdx %2*.fpt \apuvwin\apu8.* -xlocal*.* -xillicit.* -xpension.* -xrsck_lpu_hys*.* if errorlevel 1 goto WARNING goto EXIT :NOPARAM @echo ┌────────────────────────────────────────────────────┐ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ Не задан параметр имени архива !!! │ @echo │ Обратитесь к программисту сопровождения. │ @echo │ Нажмите любую клавишу. │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo └────────────────────────────────────────────────────┘ @pause >nul goto QUIT :WARNING @echo ┌────────────────────────────────────────────────────┐ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ Архивирование завершилось аварийно !!! │ @echo │ │ @echo │ Проверьте наличие и установку архиватора AR32J, │ @echo │ или наличие свободного места для копии. │ @echo │ Обратитесь к программисту сопровождения. │ @echo │ Нажмите любую клавишу. │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo └────────────────────────────────────────────────────┘ @pause >nul goto QUIT :EXIT @cls @echo ┌────────────────────────────────────────────────────┐ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ КОПИРОВАНИЕ ПРОШЛО УСПЕШНО. │ @echo │ │ @echo │ ПРИЯТНОЙ ВАМ РАБОТЫ ! │ @echo │ НАЖМИТЕ ЛЮБУЮ КЛАВИШУ. │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo └────────────────────────────────────────────────────┘ rem @pause >nul :QUIT
Изменим его. Во первых, будем использовать имя архива, включающее время его создания:
Pггддмм-ччмм
Для этого создадим вспомогательный командный файл с именем pnmgen.cmd
@ECHO OFF ECHO Генерирование имени файла вида PГГММДД-ччмм ::считываем системное время в переменную ТММ :: пробел равно и процент нужны чтобы заменить в строке времени все пробелы на 0 SET TMM=%TIME: =0% :: считываем системную дату в переменную DTA (вдруг у нас скрипт в полночь работает) SET DTA=%DATE% :: показываем наши переменные ECHO Текущая дата: %DTA% ECHO Текущее время: %TMM% ::строковыми операциями извлекаем из строки даты и времени нужные циферки ::и складываем их в переменную F7ZNAME SET F7ZNAME=P%DTA:~-2%%DTA:~3,2%%DTA:~,2%-%TMM:~,2%%TMM:~3,2% ::показываем что получилось ECHO Имя файла: "%F7ZNAME%" REM ECHO Пример имени архива: %F7ZNAME%.7z ::все описания команды SET можно "подглядеть" ::набрав в командной строке ::help set GOTO :EOF
Размещаем этот скрипт в папке APUVWIN И модифицируем скрипт архивирования заменив архиватор на 7zip использующий эквивалентные опции командной строки
@echo off rem rem На входе необходимо задать два параметра: rem 1-й параметр это имя архива (Pггммдд.ARJ) rem 2-й параметр это путь к базе данных (C:\APUVWIN\DBF\) rem if %1.==. goto NOPARAM ECHO Start with: %0 %1 %2 ECHO. REM arj32 a %1 %2*.dbf %2*.cdx %2*.fpt \apuvwin\apu8.* -xlocal*.* -xillicit.* -xpension.* -xrsck_lpu_hys*.* REM ниже эквивалентная команда для 7z.exe REM 7z.exe a %1.7z -mx4 -spf2 %2*.dbf %2*.cdx %2*.fpt C:\APUVWIN\apu8.* -xr!local*.* -xr!illicit.* -xr!pension.* -xr!rsck_lpu_hys*.* :: был вариант более длинного имени файла, включающего четыре цифры года, для этого использовался файл pnamegen.cmd :: но потом отказался от этого. При желании можно на свой вкус переделать. REM longname PГГГГММДД-ччмм.7z REM CALL pnamegen.cmd REM shortname PГГММДД-ччмм.7z CALL pnmgen.cmd ECHO 7z.exe a %F7ZNAME%.7z -spf2 %2*.dbf %2*.cdx %2*.fpt C:\APUVWIN\apu8.* -xr!local*.* -xr!illicit.* -xr!pension.* -xr!rsck_lpu_hys*.* 7z.exe a %F7ZNAME%.7z -mx4 -spf2 %2*.dbf %2*.cdx %2*.fpt C:\APUVWIN\apu8.* -xr!local*.* -xr!illicit.* -xr!pension.* -xr!rsck_lpu_hys*.* if errorlevel 1 goto WARNING goto EXIT :NOPARAM @echo ┌────────────────────────────────────────────────────┐ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ Не задан параметр имени архива !!! │ @echo │ Обратитесь к программисту сопровождения. │ @echo │ Нажмите любую клавишу. │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo └────────────────────────────────────────────────────┘ @pause >nul goto QUIT :WARNING @echo ┌────────────────────────────────────────────────────┐ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ Архивирование завершилось аварийно !!! │ @echo │ │ @echo │ Проверьте наличие и установку архиватора AR32J, │ @echo │ или наличие свободного места для копии. │ @echo │ Обратитесь к программисту сопровождения. │ @echo │ Нажмите любую клавишу. │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo └────────────────────────────────────────────────────┘ @pause >nul goto QUIT :EXIT @cls @echo ┌────────────────────────────────────────────────────┐ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ КОПИРОВАНИЕ ПРОШЛО УСПЕШНО. │ @echo │ │ @echo │ ПРИЯТНОЙ ВАМ РАБОТЫ ! │ @echo │ НАЖМИТЕ ЛЮБУЮ КЛАВИШУ. │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo │ │ @echo └────────────────────────────────────────────────────┘ rem @pause >nul :QUIT
Теперь в папке APUVWIN копируем оригинальный файл скрипта (для сохранения)
copy ARXIV.BAT ARXIVarj.BAT
и подсовываем новый скрипт архивирования
copy ARXIV7zip.bat ARXIV.BAT
После этого, при выходе из программы, архивирование будет производится с помощью 7zip (значительно быстрее, при этом архив получается почти в два раза меньше, например вместо 115Мб - 72Мб
PS: После каждого обновления APUVWIN следует повторить подмену скрипта архивирования
copy ARXIV7zip.bat ARXIV.BAT
поскольку в процессе обновления восстанавливается версия скрипта архивирования с ARJ