Показать полную графическую версию : Bat, который бы удалял все файлы, кроме созданных в начале каждого месяца.
Собственно вопрос в названии темы. Задача стоит в следующем: Есть папка с бекапами баз данных с расширением .bak. Бэкапы создаются каждый день. Нужно сделать батник, который бы удалял все файлы бекапов, кроме тех, которые были созданы в начале каждого месяца. То есть получается что в идеале должно быть так:
test_perf_backup_2016_07_01_165828_9451226.bak
test_perf_backup_2016_08_01_164426_7481004.bak
test_perf_backup_2016_09_01_033412_2902899.bak
и так далее.
Надеюсь на скорый ответ :)
megaloman
26-07-2016, 18:13
@echo off
SetLocal EnableDelayedExpansion
Set "DBak=Z:\Tralala\"
Set "Pref=test_perf_backup"
Set "Ext=bak"
FOR /L %%Y IN (2000,1,2100) DO (
If Exist "%DBak%%Pref%_%%Y_*.%Ext%" (
FOR /L %%M IN (101,1,112) DO (
Set MM=%%M & Set MM=!MM:~1,2!
If Exist "%DBak%%Pref%_%%Y_!MM!_??_*.%Ext%" (
FOR /F "usebackq skip=1 delims=" %%f IN (`Dir "%DBak%%Pref%_%%Y_!MM!_??_*.%Ext%" /A:-D /B /O:N 2^>nul`) DO Del "%DBak%%%f"
)
)
)
)
Батник удалит все файлы по маске кроме созданных первыми, согласно имени, в месяце. Батник обработает файлы с 2000 по 2100 год - надеюсь этого достаточно :)
Спасибо добрый человек и долгих лет тебе жизни :up очень выручил! Весь интернет облазил ничего по этой теме не нашел. Еще раз спасибо!
Не проще сделать что-то типа такого и запускать через планировщик не реже раза в месяц, допустим в 00.00 1го числа, когда еще нет второго файла с числом 01 в имени, хоть тут это и не важно:
@echo off
set "d=papka"
for /f "delims=" %%a in ('dir/a-d/b "%d%\*.bak"') do (
set "fb=%%a"
cmd/v/c if "!fb:~25,2!"=="01" if not exist "Backup_year" md "Backup_year"& copy/y "%d%\%%a" "Backup_year\%%a"
del/q "%d%\*"
)
exit
.
megaloman
28-07-2016, 08:21
alpap, а если по какой-либо причине первый бэкап месяца был сделан второго числа?
а если по какой-либо причине первый бэкап месяца был сделан второго числа? »
поэтому и
запускать через планировщик не реже раза в месяц, допустим в 00.00 1го числа, когда еще нет второго файла с числом 01 в имени »
+ можно доработать брать первый из найденных, иначе, если их уже будет более 2х, то кому нужны ежедневные бэкаты, если почти 3 месяца никто ничего не проверяет, кроме самих программ.
Добрые люди, тут еще нужно батник один написать. Условие такое:
Создать батник, который на отдельную папку файлового сервера (SERVER) с сервера 1с ( 1CSRV) будет копировать только те бекапы БД , которые создаются на конец текущего/начало след. месяца (29-2 числа, с условием того, если бекап за 29 число не был сделан или найден, тогда на файловый сервер копируется бекап сделанный на следующий день). То есть сделать так что бы за этот промежуток времени с 29 по 2 число был скопирован только один бекап, просто с условием того что если не будет найден бекап за 29 число батник будет искать созданные на более поздние числа но не позднее 2 числа
Tyamich, меня терзают смутные сомнения — не проще ли будет реализовать копирование сразу в момент создания бэкапа в том же задании?
Iska так было бы еще лучше. Можешь написать ?
megaloman
29-07-2016, 16:12
Tyamich, Какой смысл в 29 числе? Почему не последний бэкап месяца? С февралём Вы явно с 29 числом пролетаете. И, кстати, я бы сразу зарарил бы этот бэкап.
ну пардон к примеру 31 и 1 числа. Просто дело в том что если допустим конец месяца выпадает на воскресенье то бекап не делается, у нас так задано, что в воскресенье на серваке 1С бекапы не проводятся. поэтому надо сделать так, что бы шло на следующее число. примерно так
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.