Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.

Ответить
Настройки темы
CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.

Аватара для i-Lex

Старожил


Сообщения: 290
Благодарности: 3


Конфигурация

Профиль | Отправить PM | Цитировать


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

Отправлено: 11:30, 03-05-2014

 

Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


как часто создаются бэкапы? если они каждодневные, то можно сделать например так:
Код: Выделить весь код
@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
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:05, 03-05-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для i-Lex

Старожил


Сообщения: 290
Благодарности: 3

Профиль | Отправить PM | Цитировать


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

Отправлено: 16:55, 03-05-2014 | #3


Ветеран


Сообщения: 2196
Благодарности: 727

Профиль | Отправить PM | Цитировать


Цитата 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 кодировке.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:50, 03-05-2014 | #4


Аватара для i-Lex

Старожил


Сообщения: 290
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата 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"
)
?

Отправлено: 21:47, 03-05-2014 | #5


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@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
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:10, 03-05-2014 | #6


Ветеран


Сообщения: 2196
Благодарности: 727

Профиль | Отправить PM | Цитировать


Цитата i-Lex:
Это Юникод, или DOS'овская кодировка? »
http://www.cyberforum.ru/cmd-bat/thread738351.html
Цитата i-Lex:
т.е. это будет выглядеть примерно так »
да
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:10, 04-05-2014 | #7


Аватара для i-Lex

Старожил


Сообщения: 290
Благодарности: 3

Профиль | Отправить PM | Цитировать


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

Отправлено: 11:41, 04-05-2014 | #8


Ветеран


Сообщения: 2196
Благодарности: 727

Профиль | Отправить PM | Цитировать


Цитата 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 (выделено два раза синим цветом)
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:56, 04-05-2014 | #9


Аватара для i-Lex

Старожил


Сообщения: 290
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата sov44:
Надеюсь экспериментировали не с оригинальными бэкапами? »
Бэкапы забэкапил)
Цитата sov44:
if "!chet!"=="1" echo del /f /q »
Между "1" и del пробел один?

Отправлено: 07:18, 08-05-2014 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Скрипт трущий нечётные бэкпы, которые старше определённого времени.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - [решено] Удаление логов, которые старше определенного периода foma24 Скриптовые языки администрирования Windows 2 30-09-2013 18:51
[решено] Скрипт: найти пользователя просидевшего больше всего времени. Muro_like Программирование в *nix 4 20-11-2012 15:29
VBS/WSH/JS - Помогите пожалуйста. Скрипт Удаления файлов старше 60 дней, исключая файлы по маске KitsuNeko Скриптовые языки администрирования Windows 3 29-08-2012 13:55
CMD/BAT - [решено] Выполнение блока команд после наступления определённого времени SANIOK_AV Скриптовые языки администрирования Windows 2 07-08-2012 14:42
[решено] Скрипт, изменяющий позицию курсора через определенный интервал времени Vadikan AutoIt 2 28-07-2009 12:08




 
Переход