Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Bugs:
Минусы данного подхода
1. ничего сложного, главное чтобы архиватор понимал архивный атрибут (к примеру WinRAR)
2. планировщик может и ограничен, а скрипт нет
3. не совсем так, как минимум - переменная ERRORLEVEL плюс "If Exist"
4. можно тоже скриптом... от GUI NTBackup Имхо тоже мало толку.
Цитата Bugs:
Если будут предложения использовать ntbackup, сразу же попрошу приводить свои реально рабочие конфигурации, если можно с примерами скриптов.
к сожалению, NTBackup не жмет данные в отличе от архиваторов , зато файлов создает меньше... CMD-вариант без привязки к шедулеру, все инкрементные архивы создаются в файле полного архива, любая критика приветствуется:
Код: Выделить весь код
@echo off
SetLocal EnableDelayedExpansion
:: Параметры скрипта:
:: SOURCE - путь к сетевому ресурсу или имя BKS-файла
:: FULLDEPTH - глубина отката в полных архивах
:: INCRDEPTH - инкрементных архивов на один полный
SET SOURCE=\\SERVER\$DIR1
SET FULLDEPTH=5
SET INCRDEPTH=6

Call :CallEx GetState
Call :CallEx DelLogs
Call :CallEx StartCMD
If %ERRORLEVEL% EQU 0 (
Call :CallEx NewState
Call :CallEx SetState
Call :CallEx DelBkf)
Exit
:: Запуск процесса NTBackup
:StartCMD
Set $CMD=ntbackup backup %SOURCE% /f "%~dpn0.0.bkf" /l:f /m incremental /a
If %INCREMENT% EQU 0 Set $CMD=ntbackup backup %SOURCE% /f "%~dpn0.bkf" /l:f
Start /WAIT %$CMD%
If %ERRORLEVEL% NEQ 0 (
	Call :CallEx CopyLog
	Echo При выполнении резервного копирования возникли ошибки,
	Echo Смотрите журнал сообщений: "%~n0.log".
	Exit /B 1)
Call :CallEx CopyLog
If Exist %~n0.bkf (
	If Exist %~n0.0.bkf Call :CallEx ShiftBkf 0 1
	Ren %~n0.bkf %~n0.0.bkf
	If %ERRORLEVEL% NEQ 0 Exit /B 1
	If Exist %~n0.log Ren %~n0.log %~n0.0.log
	If %ERRORLEVEL% NEQ 0 Exit /B 2)
GoTo :EOF
:: Чистка старых логов
:DelLogs
Set $BakData=%APPDATA:~0,-17%\Local Settings\Application Data\Microsoft\Windows NT\NTbackup\Data
Del /Q /F "%$BakData%\backup*.log" >nul
If %ERRORLEVEL% NEQ 0 Exit /B 1
GoTo :EOF
:CopyLog
Set $BakData=%APPDATA:~0,-17%\Local Settings\Application Data\Microsoft\Windows NT\NTbackup\Data
If %INCREMENT% EQU 0 (
	Copy "%$BakData%\backup*.log" %~n0.log >nul
) Else (
	Copy /B %~n0.0.log+"%$BakData%\backup*.log" %~n0.0.log >nul
)
If %ERRORLEVEL% NEQ 0 Exit /B 1
GoTo :EOF
:: Расчет нового состояния
:NewState
Set /A INCREMENT=%INCREMENT%+1
If %INCREMENT% GTR %INCRDEPTH% Set INCREMENT=0
GoTo :EOF
:: Чтение параметров
:GetState
For /f "Delims=" %%i in (%~n0.ini) Do Set /A %%i+0
If "%INCREMENT%"=="" (
	Echo INCREMENT=0 >%~n0.ini
	For /f "Delims=" %%i in (%~n0.ini) Do Set /A %%i+0
	If Not "!INCREMENT!"=="0" (
		Set INCREMENT=0
		Exit /B 2
	)
)
GoTo :EOF
:: Сохранение параметров
:SetState
Set $bak=%INCREMENT%
Echo INCREMENT=%INCREMENT% >%~n0.ini
For /f "Delims=" %%i in (%~n0.ini) Do Set /A %%i+0
If Not "%INCREMENT%"=="%$bak%" Exit /B 1
GoTo :EOF
:: Переименование архивов
:ShiftBkf
If Exist %~n0.%2.bkf (
	Set /A $idx=%2+1
		Call :ShiftBkf %2 !$idx!
	If !ERRORLEVEL! NEQ 0 Exit /B 1 )
Ren %~n0.%1.bkf %~n0.%2.bkf
If %ERRORLEVEL% NEQ 0 Exit /B 1
If Exist %~n0.%2.log Del %~n0.%2.log
If %ERRORLEVEL% NEQ 0 Exit /B 2
If Exist %~n0.%1.log Ren %~n0.%1.log %~n0.%2.log
If %ERRORLEVEL% NEQ 0 Exit /B 2
GoTo :EOF
:: Удаление старых архивов
:DelBkf
For /f "tokens=1,2 delims=." %%i in ('Dir /B %~n0.?.bkf^|FindStr /REC:"\.[0-9]\.bkf"') Do (
	If %%j GEQ %FULLDEPTH% (
		Del /F/Q %%i.%%j.log
		Del /F/Q %%i.%%j.bkf)
	If !ERRORLEVEL! NEQ 0 Exit /B 1)
GoTo :EOF
:: Вызов процедур с контролем ошибок
:CallEx
Call :%*
If %ERRORLEVEL% EQU 1 (
	Echo.
	Echo Модуль "%1" вызвал исключение, работа скрипта прервана!
	Exit )
If %ERRORLEVEL% EQU 2 Echo Модуль "%1" вызвал некритичную ошибку, работа скрипта продолжена.
GoTo :EOF
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:00, 20-07-2007 | #2