Программы Дмитрия Сергунина

Объявление

Доброго времени суток, участник форума !!!

    На этом форуме Вы сможете задать и обсудить любые вопросы, связанные с перечисленными программами, а также задать любой вопрос непосредственно их автору.
    Сами программы Вы сможете скачать на сайтах автора:

http://dsp.vov.ru
http://dsp.webservis.ru

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программы Дмитрия Сергунина » Profi — программа проектирования конструкций » Как автоматизировать резервное копирование ?


Как автоматизировать резервное копирование ?

Сообщений 1 страница 5 из 5

1

Как автоматизировать резервное копирование ?

Мой вариант:
1. Написать файл .BAT  (создать текстовый файл, написать текст приведенный  ниже, отредактировать путь, сохранить файл, переименовать - сменить расширение с .txt на .bat)

"C:\Program Files\Profi310\Profi.exe" /c C:\ПАПКА_С_БАЗАМИ\БАЗА.@pf
"C:\Program Files\Profi310\Profi.exe" /r C:\ПАПКА_С_БАЗАМИ\БАЗА.@pf
mkdir "C:\ПАПКА_С_БАЗАМИ\archive\%date:~6,4%.%date:~3,2%.%date:~0,2%"
copy "C:\ПАПКА_С_БАЗАМИ\БАЗА.@pf" "C:\ПАПКА_С_БАЗАМИ\archive\%date:~6,4%.%date:~3,2%.%date:~0,2%\copy БАЗА.@pf"

2. Проверить файл его исполнением
3. Поставить в автозагрузку либо использовать планировщик заданий, кому как удобней.

////  коментарии

"чтобы выполнение батника не прерывалось сообщением, что 'файл в полном порядке', ключи /R и /C необходимо задавать в нижнем регистре (т.е. /r и /c)

тогда сообщение будет выдаваться только на битой базе"  © DS

ключи %date:~6,4%.%date:~3,2%.%date:~0,2% позволяют использовать в названии папки "текущую дату в японском формате :  год-месяц-день 

—  для более наглядной сортировки " © DS

Проверял на битой базе - сообщение выдается!  Только если закрыть его (сообщение), база все равно копируется. :smoke:   

Хм...    как привязать копирование   к успешной  / не успешной    проверке (не всегда у меня есть возможность отследить сообщение!)

Отредактировано Денис (2011-11-28 10:47:25)

0

2

Денис написал(а):

Хм...    как привязать копирование   к успешной  / не успешной    проверке (не всегда у меня есть возможность отследить сообщение!)

Как то так :

mkdir "C:\ПАПКА_С_БАЗАМИ\archive\%date:~6,4%.%date:~3,2%.%date:~0,2%"
"C:\Program Files\Profi310\Profi.exe" /c C:\ПАПКА_С_БАЗАМИ\БАЗА.@pf
"C:\Program Files\Profi310\Profi.exe" /r C:\ПАПКА_С_БАЗАМИ\БАЗА.@pf
IF ((( /r C:\ПАПКА_С_БАЗАМИ\БАЗА.@pf = УСПЕХ ))) GOTO 1
IF not ((( /r C:\ПАПКА_С_БАЗАМИ\БАЗА.@pf = УСПЕХ ))) GOTO 2
:1
copy "C:\ПАПКА_С_БАЗАМИ\БАЗА.@pf" "C:\ПАПКА_С_БАЗАМИ\archive\%date:~6,4%.%date:~3,2%.%date:~0,2%\GOOD copy БАЗА.@pf"
:2
copy "C:\ПАПКА_С_БАЗАМИ\БАЗА.@pf" "C:\ПАПКА_С_БАЗАМИ\archive\%date:~6,4%.%date:~3,2%.%date:~0,2%\BAD copy БАЗА.@pf"
end

to DS: все что смог накопать  :dontknow:

+1

3

Денис написал(а):

IF ((( /r C:\ПАПКА_С_БАЗАМИ\БАЗА.@pf = УСПЕХ ))) GOTO 1

... да-да, ты, несомненно, прав:  только, проанализировав в батнике успешно-ли прошла проверка целостности (т.е. программа Profi должна выдавать в батник т.н. код завершения), можно полностью (т.е. без присутствия человека) автоматизировать резервное копирование !!!

вот мой полный (с ведением протокола копирования: CopyDB.log) вариант BAT-файла (например, CopyDB.bat), который всё это смог бы сделать:

@echo off

rem -- Полный путь к программе
SET Progr=C:\Program Files\Profi310\Profi.exe

rem -- Каталог, где лежат рабочие базы
SET DBDir=D:\Мои документы\Profi310\

rem -- Каталог, куда будет производиться резервное копирование (архив)
SET ArDir=D:\Мои документы\Архив\%date:~6,4%-%date:~3,2%-%date:~0,2%\

rem -- Создаём каталог для нового архива
mkdir "%ArDir%"

rem -- Здесь (вызов подпрограммы) перечисляем все базы для копирования
call :CopyBase Profi.@pf
call :CopyBase Profi-A.@pf
call :CopyBase Profi-MU.@pf
call :CopyBase Profi-R.@pf

exit

rem -- Подпрограмма, где, собственно, и происходят сжатие, проверка целостности
rem -- с анализом кода завершения, копирование и запись в файл протокола
:CopyBase
"%Progr%" /c %DBDir%%1
"%Progr%" /r %DBDir%%1
if %errorlevel% == 0 (
  copy "%DBDir%%1" "%ArDir%%1" >nul
  echo %date%  %time:~0,8%  Успешное копирование базы:  %1 >>CopyDB.log
) else (
  echo %date%  %time:~0,8%  ** База испорчена, не копируется:  %1 >>CopyDB.log
)
exit /b

... только вот вся беда в том, что на сегодняшний день (т.е. релиз 3.10.0330) программа:

1. не выдаёт код завершения в батник (точнее, независимо от успеха сжатия или проверки, всегда будет 'errorlevel = 0') :(

2. ключи командной строки /c и /r в нижнем регистре работают так (это не документировано в инструкции), что только в случае неудачного сжатия или проверки будет выдаваться окно с сообщениями об ошибке, что приостановит дальнейшее выполнение батника, а, следовательно, и невозможно будет оставлять это задание, например, на сервере на ночь для планировщика заданий (требуется присутствие человека, чтобы в диалоге закрывал окно при битых базах) :(

-=-

моё предложение:

1. при использовании в командной строке ключей (в нижнем регистре) /c и /r Profi будет возвращать в батник:
    'errorlevel = 0' — при успешном сжатии / проверке
    'errorlevel = 1' — при неудачном сжатии / проверке

2. при использовании в командной строке ключей (в нижнем регистре) /c и /r даже в случае неудачного сжатия / проверки диалогового окна с сообщением об ошибке выдаваться не будет (т.е. будет только молчаливый код завершения)

когда перечисленные пункты будут реализованы в программе, то можно будет оставлять резервное копирование (в автоматическом режиме) на ночь (с активацией по планировщику заданий), а, придя утром, только просмотреть протокол копирования (текстовый файл CopyDB.log) — всё-ли успешно выполнилось ?

и, если моё предложение прокатывает, то ...

принято !!!  :flag:   —  будет сделано в очередном релизе

+1

4

:cool:

0

5

как и обещал, релиз 3.10.0331 с новыми возможностями выложен сегодня на сайт  :mybb:

 

 

-=-

Денис, ты, наверное, первым всё это опробуешь — отпиши сюда о результатах, плз.

0


Вы здесь » Программы Дмитрия Сергунина » Profi — программа проектирования конструкций » Как автоматизировать резервное копирование ?