CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.
-
i-Lex
CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.
Нужно тереть бэкапы (файлы oeГГГГ-ММ-ДД_23.rar) в папке C:\OE\OEBackUp\. Причём, не просто так, а которые старше 2х недель и из оставшихся, тереть нечётные.
Ибо за месяц, бэкапы вырастают до 50ГБ, а изменяются там всего несколько строк в БД.
Будет всё это запускаться Планировщиком Windows раз в неделю.
Плюс хотелось бы видеть лог в \\File_server\обмен\IT-Отдел\Logs\BackupDelete\Log.txt
Заранее спасибо.
Ибо за месяц, бэкапы вырастают до 50ГБ, а изменяются там всего несколько строк в БД.
Будет всё это запускаться Планировщиком Windows раз в неделю.
Плюс хотелось бы видеть лог в \\File_server\обмен\IT-Отдел\Logs\BackupDelete\Log.txt
Заранее спасибо.
-
Elven
Re: CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.
как часто создаются бэкапы? если они каждодневные, то можно сделать например так:
Код:
АХТУНГ! Избегай рускоязычных названий папок, а то будет эта хрень работать с пятого на десятое.
я бы рекомендовал для логов расшарить отдельную папку с доступом только для админов (все равно больше никто их читать не будет) и выделенную в коде курсивом часть поменять на \\file_server\logs[/i]
Код:
Код: Выделить всё
@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]
-
i-Lex
Re: CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.
Цитата i-Lex:
А скрипт именно нечётные удаляет даты?
нет. для удаления нечётных дат, попробуйте дописать ниже скрипта Elven строчки
Код:
для боевого пуска убрать echo
Цитата Elven:
Избегай рускоязычных названий папок
Проблема с кириллицей решается сохранением батника в 866 кодировке.
А скрипт именно нечётные удаляет даты?
CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.
нет. для удаления нечётных дат, попробуйте дописать ниже скрипта 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:
Избегай рускоязычных названий папок
CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.
Проблема с кириллицей решается сохранением батника в 866 кодировке.
-
sov44
Re: CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.
Цитата sov44:
Проблема с кириллицей решается сохранением батника в 866 кодировке.
Это Юникод, или DOS'овская кодировка?
Цитата sov44:
для удаления нечётных дат, попробуйте дописать ниже скрипта Elven строчки
т.е. это будет выглядеть примерно так:
Код:
?
Проблема с кириллицей решается сохранением батника в 866 кодировке.
CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.
Это Юникод, или DOS'овская кодировка?
Цитата sov44:
для удаления нечётных дат, попробуйте дописать ниже скрипта Elven строчки
CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.
т.е. это будет выглядеть примерно так:
Код:
Код: Выделить всё
@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"
)?
-
i-Lex
Re: CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.
Код: Выделить всё
@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-
Georgio
Re: CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.
Цитата i-Lex:
Это Юникод, или DOS'овская кодировка?
Цитата i-Lex:
т.е. это будет выглядеть примерно так
да
Это Юникод, или DOS'овская кодировка?
CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.
http://www.cyberforum.ru/cmd-bat/thread738351.html
Цитата i-Lex:
т.е. это будет выглядеть примерно так
CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.
да
-
sov44
Re: CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.
Эм... Он снёс все бэкапы...
-
i-Lex
Re: CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.
Цитата i-Lex:
Эм... Он снёс все бэкапы...
Надеюсь экспериментировали не с оригинальными бэкапами?
немного поправил код Elven, добавил свой
Код:
после проверки, для боевого пуска удалить echo (выделено два раза синим цветом)
Эм... Он снёс все бэкапы...
CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.
Надеюсь экспериментировали не с оригинальными бэкапами?
немного поправил код 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 (выделено два раза синим цветом)
-
sov44
Re: CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.
Цитата sov44:
Надеюсь экспериментировали не с оригинальными бэкапами?
Бэкапы забэкапил)
Цитата sov44:
if "!chet!"=="1" echo del /f /q
Между "1" и del пробел один?
Надеюсь экспериментировали не с оригинальными бэкапами?
CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.
Бэкапы забэкапил)
Цитата sov44:
if "!chet!"=="1" echo del /f /q
CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.
Между "1" и del пробел один?