Войти

Показать полную графическую версию : Скрипт трущий нечётные бэкпы, которые старше определённого времени.


i-Lex
03-05-2014, 11:30
Нужно тереть бэкапы (файлы oeГГГГ-ММ-ДД_23.rar) в папке C:\OE\OEBackUp\. Причём, не просто так, а которые старше 2х недель и из оставшихся, тереть нечётные.
Ибо за месяц, бэкапы вырастают до 50ГБ, а изменяются там всего несколько строк в БД.
Будет всё это запускаться Планировщиком Windows раз в неделю.
Плюс хотелось бы видеть лог в \\File_server\обмен\IT-Отдел\Logs\BackupDelete\Log.txt
Заранее спасибо.

Elven
03-05-2014, 15:05
как часто создаются бэкапы? если они каждодневные, то можно сделать например так:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
rem перебираем файлы по маске oe*23.rar с сортировкой по дате с самого свежего начиная с 15-го файла
for /F "skip=14, delims=.rar" %%f in ('dir /B /O-D C:\OE\OEBackUp\oe*23.rar') do (
rem удаляем файлы и пишем в лог что и когда было удалено
del /q /f "C:\OE\OEBackUp\%%f" && echo "C:\OE\OEBackUp\%%f deleted %date%" >> \\File_server\обмен\IT-Отдел\Logs\BackupDelete\Log.txt
)


АХТУНГ! Избегай рускоязычных названий папок, а то будет эта хрень работать с пятого на десятое.
я бы рекомендовал для логов расшарить отдельную папку с доступом только для админов (все равно больше никто их читать не будет) и выделенную в коде курсивом часть поменять на \\file_server\logs

i-Lex
03-05-2014, 16:55
Elven, Я на сервере, где бэкапы, тупо расшарю папку и буду туда писать. Спасибо, завтра попоробую.
А скрипт именно нечётные удаляет даты?
Бэкапы делаются каждый день.

sov44
03-05-2014, 18:50
А скрипт именно нечётные удаляет даты? »
нет. для удаления нечётных дат, попробуйте дописать ниже скрипта Elven строчки
:: удаляем не чётные даты
for /f "tokens=1-4 delims=_-" %%a in ('dir /b /s "C:\OE\OEBackUp\oe*_23.rar"') do (
set /a chet=%%c%%2
if "!chet!"=="1" echo del /f /q "%%a-%%b-%%c_%%d"
)
для боевого пуска убрать echo
Избегай рускоязычных названий папок »
Проблема с кириллицей решается сохранением батника в 866 кодировке.

i-Lex
03-05-2014, 21:47
Проблема с кириллицей решается сохранением батника в 866 кодировке. »
Это Юникод, или DOS'овская кодировка?
для удаления нечётных дат, попробуйте дописать ниже скрипта Elven строчки »
т.е. это будет выглядеть примерно так:@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
rem перебираем файлы по маске oe*23.rar с сортировкой по дате с самого свежего начиная с 15-го файла
for /F "skip=14, delims=.rar" %%f in ('dir /B /O-D C:\OE\OEBackUp\oe*23.rar') do (
rem удаляем файлы и пишем в лог что и когда было удалено
del /q /f "C:\OE\OEBackUp\%%f" && echo "C:\OE\OEBackUp\%%f deleted %date%" >> \\File_server\обмен\IT-Отдел\Logs\BackupDelete\Log.txt
)
:: удаляем не чётные даты
for /f "tokens=1-4 delims=_-" %%a in ('dir /b /s "C:\OE\OEBackUp\oe*_23.rar"') do (
set /a chet=%%c%%2
if "!chet!"=="1" echo del /f /q "%%a-%%b-%%c_%%d"
)?

Georgio
03-05-2014, 22:10
@echo off
chcp 1251>nul
setlocal enabledelayedexpansion

set "folder=C:\OE\OEBackUp"
set "log=\\File_server\обмен\IT-Отдел\Logs\BackupDelete\Log.txt"

(
set /p=%date% %time%<nul
set "command=cmd /c del /a /f /q @file&& echo @file deleted"
forfiles /p "%folder%" /d -14 /c "!command!"
for /l %%i in (1 2 31) do (
set day=0%%i
for %%j in ("%folder%\oe20??-??-!day:~-2!_23.rar") do (
del /a /f /q "%%~j" 2>nul&& (
echo "%%~nxj" deleted
))
)
echo.
)>>"%log%"
endlocal
exit /b

sov44
04-05-2014, 08:10
Это Юникод, или DOS'овская кодировка? »
http://www.cyberforum.ru/cmd-bat/thread738351.html
т.е. это будет выглядеть примерно так »
да

i-Lex
04-05-2014, 11:41
Эм... Он снёс все бэкапы...

sov44
04-05-2014, 17:56
Эм... Он снёс все бэкапы... »
Надеюсь экспериментировали не с оригинальными бэкапами?
немного поправил код Elven, добавил свой
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
:: перебираем файлы по маске oe*_23.rar с сортировкой всех файлов по дате от самых свежих, не обрабатывая первых 14 файлов.
for /f "skip=14 delims=" %%f in ('dir /b /o-d "C:\OE\OEBackUp\oe*_23.rar" 2^>nul') do (
echo del /f /q "C:\OE\OEBackUp\%%f" && >>deleted.log echo. "C:\OE\OEBackUp\%%f deleted %date%"
)
:: удаляем не чётные даты
for /f "tokens=1-4 delims=_-" %%a in ('dir /b /s "C:\OE\OEBackUp\oe*_23.rar"') do (
set /a chet=%%c%%2
if "!chet!"=="1" echo del /f /q "%%a-%%b-%%c_%%d"&& >>deleted.log echo. C:\OE\OEBackUp\%%a-%%b-%%c_%%d
)
после проверки, для боевого пуска удалить echo (выделено два раза синим цветом)

i-Lex
08-05-2014, 07:18
Надеюсь экспериментировали не с оригинальными бэкапами? »
Бэкапы забэкапил)
if "!chet!"=="1" echo del /f /q »
Между "1" и del пробел один?

Iska
08-05-2014, 07:31
Не менее одного.




© OSzone.net 2001-2012