Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Удаление архива за вчерашнюю дату (http://forum.oszone.net/showthread.php?t=242443)

pavelvdo 11-09-2012 16:16 1986742

Удаление архива за вчерашнюю дату
 
Здраствуйте. Вобщем проблема такая, есть бат скрипт, который бэкапит файлы на серваке в архив, а далее копирует их в сетевое хранилище. Причем при создании архива в его имя автоматически вбивается текущая дата, как сделать так, чтобы после того как архив скопируется удалялся архив за предыдущую дату? Заранее огромное спасибо!

megaloman 11-09-2012 22:22 1987000

Вы не написали ТОЧНО как именуются Ваши файлы, поэтому вот батник, удаляющий файлы, созданные НЕ СЕГОДНЯ, безотносительно к имени, в указанной директории.
Код:

@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 1987177

у меня вот такой вот скрипт работает

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%


Цитата:

Цитата megaloman
Вы не написали ТОЧНО как именуются Ваши файлы, поэтому вот батник, удаляющий файлы, созданные НЕ СЕГОДНЯ, безотносительно к имени, в указанной директории.
Код:
@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 1987636

Насколько я понял, накапливаются лишние файлы .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 1990867

можно еще так:
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 2145468

Скрипт удаляет все в заданной папке, старше указанного времени
читать дальше »

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


Время: 17:01.

Время: 17:01.
© OSzone.net 2001-