Компьютерный форум 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=281763)

i-Lex 03-05-2014 11:30 2346353

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

Elven 03-05-2014 15:05 2346444

как часто создаются бэкапы? если они каждодневные, то можно сделать например так:
Код:

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

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

sov44 03-05-2014 18:50 2346589

Цитата:

Цитата i-Lex
А скрипт именно нечётные удаляет даты? »

нет. для удаления нечётных дат, попробуйте дописать ниже скрипта 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
Цитата:

Цитата Elven
Избегай рускоязычных названий папок »

Проблема с кириллицей решается сохранением батника в 866 кодировке.

i-Lex 03-05-2014 21:47 2346659

Цитата:

Цитата sov44
Проблема с кириллицей решается сохранением батника в 866 кодировке. »

Это Юникод, или DOS'овская кодировка?
Цитата:

Цитата sov44
для удаления нечётных дат, попробуйте дописать ниже скрипта 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 2346677

Код:

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

Цитата:

Цитата i-Lex
Это Юникод, или DOS'овская кодировка? »

http://www.cyberforum.ru/cmd-bat/thread738351.html
Цитата:

Цитата i-Lex
т.е. это будет выглядеть примерно так »

да

i-Lex 04-05-2014 11:41 2346849

Эм... Он снёс все бэкапы...

sov44 04-05-2014 17:56 2347048

Цитата:

Цитата i-Lex
Эм... Он снёс все бэкапы... »

Надеюсь экспериментировали не с оригинальными бэкапами?
немного поправил код 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 2348666

Цитата:

Цитата sov44
Надеюсь экспериментировали не с оригинальными бэкапами? »

Бэкапы забэкапил)
Цитата:

Цитата sov44
if "!chet!"=="1" echo del /f /q »

Между "1" и del пробел один?

Iska 08-05-2014 07:31 2348668

Не менее одного.


Время: 20:54.

Время: 20:54.
© OSzone.net 2001-