Bullet-Avalon
14-09-2010, 13:32
Добрый день, итак расскажу по подробнее, что именно хочу сделать и , что не получается.
Данный скрипт, выполняется каждый день и должен
1. На win2008 делать SystemStateBackup на локальный диск (D)
2. Проверять кол-во бэкапов в указанной папке, на локальном компе (не более 1-го). Путь выглядит так - D:\WindowsImageBackup\server\SystemStateBackup в которой находятся папки с датой, которая соответствует дате бэкапа. Если там находится более 1 бэкапа, то удалить старые бэкапы(папки и их содержимое), оставив тока самый свежий.
3. Проверить папку для бэкапов на удаленной шаре, ограничение на кол-во бэкапов не более 5, опять таки если более -удалить наиболее старые.
4.Копировать с локального хранилища бэкап (пункт2) на удаленную шару(пункт3)
Проблема в следующем, когда скрипт находит что папок больше указанного кол-ва, он пытается их удалить, НО выводит потом сообщение - "ПАПКА НЕ ПУСТА", тоесть для теста создал неск пустых папок, он их удалил норм, а если там уже чтото содержится то выводит данное сообщение. Прошу вас помочь найти и исправить ошибку.
Итак вот сам код
@echo off
::Первая часть скрипта - SystemStateBackup
rem run the backup echo Backing up systemstate to Local Disk D
wbadmin start systemstatebackup -backuptarget:d: -quiet
::Вторая часть скрипта - Проверка кол-ва бэкапов на локальном диске
@Echo Off
SetLocal EnableDelayedExpansion
:: Папка с бэкапами, макс кол-во бэкапов
Set $DST=D:\WindowsImageBackup\server\SystemStateBackup
Set $OLD=1
:: Находим текущие день/месяц/год
For /F "Tokens=1 Delims=." %%i In ('WMIC OS Get LocalDateTime^|Find "."')
Do Set $Time=%%i
Set $Y=%$Time:~0,4%&Set $M=0%$Time:~4,2%&Set $D=0%$Time:~6,2%
Set $M=%$M:~-2%&Set $D=%$D:~-2%
:: Ограничиваем количество архивов
For /F "Tokens=1-3 Delims=." %%i In ('DIR /B/A:D %$DST%\??.??.????')
Do Set $_%%k%%j%%i=%%i.%%j.%%k
For /F "Tokens=2 Delims==" %%i In ('Set $_^|Sort /R') Do (
Set /A $OLD-=1
If !$OLD! LSS 0 RD /S/Q "%$DST%\%%i"
)
::Третья часть скрипта - Проверка кол-ва бэкапов на удаленной шаре
@Echo Off
SetLocal EnableDelayedExpansion
:: Папка с бэкапами, макс кол-во бэкапов
Set $DST=\\192.168.0.5\backup$\SystemStateDc
Set $OLD=4
:: Находим текущие день/месяц/год
For /F "Tokens=1 Delims=." %%i In ('WMIC OS Get LocalDateTime^|Find "."')
Do Set $Time=%%i
Set $Y=%$Time:~0,4%&Set $M=0%$Time:~4,2%&Set $D=0%$Time:~6,2%
Set $M=%$M:~-2%&Set $D=%$D:~-2%
:: Ограничиваем количество архивов
For /F "Tokens=1-3 Delims=." %%i In ('DIR /B/A:D %$DST%\??.??.????')
Do Set $_%%k%%j%%i=%%i.%%j.%%k
For /F "Tokens=2 Delims==" %%i In ('Set $_^|Sort /R') Do (
Set /A $OLD-=1
If !$OLD! LSS 0 RD /S/Q "%$DST%\%%i"
)
:: Четвертая часть скрипта - копирование с локальной папки на удаленную шару
Set InDir="D:\WindowsImageBackup\server\SystemStateBackup "
Set Double1="\\192.168.0.5\backup$\SystemStateDc"
rem Set DT=%Date%
Set DT=%Date:~6,4%%Date:~3,2%%Date:~0,2%
Call :CopyDir %InDir% %Double1%
GoTo End
:CopyDir
Set Otkuda="%~1\*.*"
Set Kuda1=%~1
Set Kuda1="%~2\%DT%_%Kuda1:~3,1000%\"
xcopy %Otkuda% %Kuda1% /Y /S
:End
Данный скрипт, выполняется каждый день и должен
1. На win2008 делать SystemStateBackup на локальный диск (D)
2. Проверять кол-во бэкапов в указанной папке, на локальном компе (не более 1-го). Путь выглядит так - D:\WindowsImageBackup\server\SystemStateBackup в которой находятся папки с датой, которая соответствует дате бэкапа. Если там находится более 1 бэкапа, то удалить старые бэкапы(папки и их содержимое), оставив тока самый свежий.
3. Проверить папку для бэкапов на удаленной шаре, ограничение на кол-во бэкапов не более 5, опять таки если более -удалить наиболее старые.
4.Копировать с локального хранилища бэкап (пункт2) на удаленную шару(пункт3)
Проблема в следующем, когда скрипт находит что папок больше указанного кол-ва, он пытается их удалить, НО выводит потом сообщение - "ПАПКА НЕ ПУСТА", тоесть для теста создал неск пустых папок, он их удалил норм, а если там уже чтото содержится то выводит данное сообщение. Прошу вас помочь найти и исправить ошибку.
Итак вот сам код
@echo off
::Первая часть скрипта - SystemStateBackup
rem run the backup echo Backing up systemstate to Local Disk D
wbadmin start systemstatebackup -backuptarget:d: -quiet
::Вторая часть скрипта - Проверка кол-ва бэкапов на локальном диске
@Echo Off
SetLocal EnableDelayedExpansion
:: Папка с бэкапами, макс кол-во бэкапов
Set $DST=D:\WindowsImageBackup\server\SystemStateBackup
Set $OLD=1
:: Находим текущие день/месяц/год
For /F "Tokens=1 Delims=." %%i In ('WMIC OS Get LocalDateTime^|Find "."')
Do Set $Time=%%i
Set $Y=%$Time:~0,4%&Set $M=0%$Time:~4,2%&Set $D=0%$Time:~6,2%
Set $M=%$M:~-2%&Set $D=%$D:~-2%
:: Ограничиваем количество архивов
For /F "Tokens=1-3 Delims=." %%i In ('DIR /B/A:D %$DST%\??.??.????')
Do Set $_%%k%%j%%i=%%i.%%j.%%k
For /F "Tokens=2 Delims==" %%i In ('Set $_^|Sort /R') Do (
Set /A $OLD-=1
If !$OLD! LSS 0 RD /S/Q "%$DST%\%%i"
)
::Третья часть скрипта - Проверка кол-ва бэкапов на удаленной шаре
@Echo Off
SetLocal EnableDelayedExpansion
:: Папка с бэкапами, макс кол-во бэкапов
Set $DST=\\192.168.0.5\backup$\SystemStateDc
Set $OLD=4
:: Находим текущие день/месяц/год
For /F "Tokens=1 Delims=." %%i In ('WMIC OS Get LocalDateTime^|Find "."')
Do Set $Time=%%i
Set $Y=%$Time:~0,4%&Set $M=0%$Time:~4,2%&Set $D=0%$Time:~6,2%
Set $M=%$M:~-2%&Set $D=%$D:~-2%
:: Ограничиваем количество архивов
For /F "Tokens=1-3 Delims=." %%i In ('DIR /B/A:D %$DST%\??.??.????')
Do Set $_%%k%%j%%i=%%i.%%j.%%k
For /F "Tokens=2 Delims==" %%i In ('Set $_^|Sort /R') Do (
Set /A $OLD-=1
If !$OLD! LSS 0 RD /S/Q "%$DST%\%%i"
)
:: Четвертая часть скрипта - копирование с локальной папки на удаленную шару
Set InDir="D:\WindowsImageBackup\server\SystemStateBackup "
Set Double1="\\192.168.0.5\backup$\SystemStateDc"
rem Set DT=%Date%
Set DT=%Date:~6,4%%Date:~3,2%%Date:~0,2%
Call :CopyDir %InDir% %Double1%
GoTo End
:CopyDir
Set Otkuda="%~1\*.*"
Set Kuda1=%~1
Set Kuda1="%~2\%DT%_%Kuda1:~3,1000%\"
xcopy %Otkuda% %Kuda1% /Y /S
:End