Показать полную графическую версию : Удаление архива за вчерашнюю дату
pavelvdo
11-09-2012, 16:16
Здраствуйте. Вобщем проблема такая, есть бат скрипт, который бэкапит файлы на серваке в архив, а далее копирует их в сетевое хранилище. Причем при создании архива в его имя автоматически вбивается текущая дата, как сделать так, чтобы после того как архив скопируется удалялся архив за предыдущую дату? Заранее огромное спасибо!
megaloman
11-09-2012, 22:22
Вы не написали ТОЧНО как именуются Ваши файлы, поэтому вот батник, удаляющий файлы, созданные НЕ СЕГОДНЯ, безотносительно к имени, в указанной директории. @Echo off
REM Если дата в формате дд.мм.гггг
Set Folder=D:\Delete\Folder
Set Now=%Date:~3,2%-%Date:~0,2%-%Date:~6,4%
FOR /F "usebackq delims=" %%f IN (`Xcopy /L /D:%Now% "%Folder%\*.*" %Tmp%`) DO Del "%%f" 2>nul
pavelvdo
12-09-2012, 09:39
у меня вот такой вот скрипт работает
set DIR_BACKUP=j:\BackUp\
set NAME_PC=serverasu\mssql2
Set DIR_BACKUP_DOUBLE=\\vega\BackUp\
md %DIR_BACKUP%
sqlcmd -S %NAME_PC% -E -Q "BACKUP DATABASE sdnp TO DISK = N'%DIR_BACKUP%\sdnp.bak' with init"
Echo End wait
sqlcmd -S %NAME_PC% -E -Q "BACKUP DATABASE ruk TO DISK = N'%DIR_BACKUP%\ruk.bak' with init"
Echo End wait
sqlcmd -S %NAME_PC% -E -Q "BACKUP DATABASE uva TO DISK = N'%DIR_BACKUP%\uva.bak' with init"
Echo End wait
sqlcmd -S %NAME_PC% -E -Q "BACKUP DATABASE okp TO DISK = N'%DIR_BACKUP%\okp.bak' with init"
Echo End wait
sqlcmd -S %NAME_PC% -E -Q "BACKUP DATABASE nariad TO DISK = N'%DIR_BACKUP%\nariad.bak' with init"
Echo End wait
sqlcmd -S %NAME_PC% -E -Q "BACKUP DATABASE sd TO DISK = N'%DIR_BACKUP%\sd.bak' with init"
Echo End wait
sqlcmd -S %NAME_PC% -E -Q "BACKUP DATABASE sed TO DISK = N'%DIR_BACKUP%\sed.bak' with init"
Echo End wait
sqlcmd -S %NAME_PC% -E -Q "BACKUP DATABASE osnastka TO DISK = N'%DIR_BACKUP%\osnastka.bak' with init"
Echo End wait
sqlcmd -S %NAME_PC% -E -Q "BACKUP DATABASE servicedesk TO DISK = N'%DIR_BACKUP%\servicedesk.bak' with init"
Echo End wait
set NAME_PC=serverasu\mssql1
sqlcmd -S %NAME_PC% -E -Q "BACKUP DATABASE upp TO DISK = N'%DIR_BACKUP%\upp.bak' with init"
Echo End wait
"C:\Program Files\7-Zip\7z.exe" a %DIR_BACKUP%\BackUp_mssql_%DATE%.7z %DIR_BACKUP%\*.bak
del /f/q %DIR_BACKUP%\sdnp.bak
del /f/q %DIR_BACKUP%\ruk.bak
del /f/q %DIR_BACKUP%\uva.bak
del /f/q %DIR_BACKUP%\okp.bak
del /f/q %DIR_BACKUP%\nariad.bak
del /f/q %DIR_BACKUP%\sd.bak
del /f/q %DIR_BACKUP%\sed.bak
del /f/q %DIR_BACKUP%\osnastka.bak
del /f/q %DIR_BACKUP%\upp.bak
xcopy %DIR_BACKUP%BackUp_mssql_%DATE%.7z %DIR_BACKUP_DOUBLE%
Вы не написали ТОЧНО как именуются Ваши файлы, поэтому вот батник, удаляющий файлы, созданные НЕ СЕГОДНЯ, безотносительно к имени, в указанной директории.
Код:
@Echo off
REM Если дата в формате дд.мм.гггг
Set Folder=D:\Delete\Folder
Set Now=%Date:~3,2%-%Date:~0,2%-%Date:~6,4%
FOR /F "usebackq delims=" %%f IN (`Xcopy /L /D:%Now% "%Folder%\*.*" %Tmp%`) DO Del "%%f" 2>nul »
Спасибо правда я с трудом представляю куда его тут вставить...
megaloman
12-09-2012, 22:31
Насколько я понял, накапливаются лишние файлы .7z в папке %DIR_BACKUP%
Для моего скрипта указать
Set Folder==j:\BackUp
а в xcopy лучше вместо *.* указать BackUp_mssql_*.7z
Вообще-то после конкретной постановки задачи решение можно сделать красивее.
@Echo off
cls
Set Spisok=sdnp.bak ruk.bak uva.bak okp.bak nariad.bak sd.bak sed.bak osnastka.bak upp.bak
Set DIR_BACKUP=j:\BackUp
Set NAME_PC=serverasu\mssql2
Set DIR_BACKUP_DOUBLE=\\vega\BackUp
md %DIR_BACKUP%
FOR %%f IN (%Spisok%) DO (
sqlcmd -S %NAME_PC% -E -Q "BACKUP DATABASE sdnp TO DISK = N'%DIR_BACKUP%\%%f' with init"
Echo End %DIR_BACKUP%\%%f
)
Set Name7z=%DIR_BACKUP%\BackUp_mssql_%DATE%.7z
Set Del7z=%DIR_BACKUP%\BackUp_mssql_*.7z
"C:\Program Files\7-Zip\7z.exe" a %Name7z% %DIR_BACKUP%\*.bak
If Exist %Name7z% (
FOR %%f IN (%Del7z%) DO If Not %%f==%Name7z% Del %%f
)
FOR %%f IN (%Spisok%) DO Del %DIR_BACKUP%\%%f
Отлаживал этот скрипт весьма приблизительно - у меня нет ни SQL ни 7Z
firstarey
18-09-2012, 15:16
можно еще так:
1. создание архива:
%RAR% %RAR_param% %RAR_arhive%
где:
%RAR% - путь где лежит архиватор
"C:\Program Files\WinRAR\WinRAR.exe"
%RAR_param% - параметры архивирования (голубым выделен параметр "добавить дату к имени файла" формат можно менять на свой)
a -r -rr15p -os -ow -t -ag+YYYY-MM-DD C:\куда_сохранить_архив
%RAR_arhive% - что архивируем (через пробел)
C:\папка_1\*.* C:\папка_2\*.*
2. удаление старых архивов:
forfiles /P P:\ /M *.* /S /D -5 /C "cmd /c echo Deleted: @PATH >> %DIR_log%erase.log & del @FILE"
где:
P:\ - диск\папка из которой удаляем файлы
-5 удаляем файлы старше 4 дней
то, что в кавычках вывод результата в cmd для записи в лог файл
sergeypele
06-05-2013, 18:11
Скрипт удаляет все в заданной папке, старше указанного времени
set fso=Wscript.CreateObject("Scripting.FileSystemObject")
dir="C:\mail"
Set f = fso.GetFolder(dir)
Set fc = f.Files
For Each f1 in fc
d= f1.DateCreated
diff=DateDiff("d",d,Now)
if diff>14 Then - кол-во дней сколько хранить
WScript.Echo "DELETE! " & f1.name
fso.DeleteFile(dir & "\" & f1.name)
end if
Next
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.