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

Аватара пользователя
i-Lex

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

Сообщение i-Lex »

Нужно тереть бэкапы (файлы oeГГГГ-ММ-ДД_23.rar) в папке C:\OE\OEBackUp\. Причём, не просто так, а которые старше 2х недель и из оставшихся, тереть нечётные.

Ибо за месяц, бэкапы вырастают до 50ГБ, а изменяются там всего несколько строк в БД.

Будет всё это запускаться Планировщиком Windows раз в неделю.

Плюс хотелось бы видеть лог в \\File_server\обмен\IT-Отдел\Logs\BackupDelete\Log.txt

Заранее спасибо.
Аватара пользователя
Elven

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

Сообщение 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
)

АХТУНГ! Избегай рускоязычных названий папок, а то будет эта хрень работать с пятого на десятое.

я бы рекомендовал для логов расшарить отдельную папку с доступом только для админов (все равно больше никто их читать не будет) и выделенную в коде курсивом часть поменять на \\file_server\logs[/i]
Аватара пользователя
i-Lex

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

Сообщение i-Lex »

Цитата i-Lex:



А скрипт именно нечётные удаляет даты?
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 »

Цитата sov44:



Проблема с кириллицей решается сохранением батника в 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 - Скрипт трущий нечётные бэкпы, которые старше определённого времени.

Сообщение i-Lex »

Код: Выделить всё

@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
Аватара пользователя
i-Lex

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

Сообщение i-Lex »

Цитата i-Lex:



Эм... Он снёс все бэкапы...
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 (выделено два раза синим цветом)
Ответить

Вернуться в «Скриптовые языки администрирования Windows»