Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Bat, который бы удалял все файлы, кроме созданных в начале каждого месяца. (http://forum.oszone.net/showthread.php?t=317170)

Tyamich 26-07-2016 12:37 2654217

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 2654300

Код:

@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 год - надеюсь этого достаточно :)

Tyamich 27-07-2016 09:47 2654414

Спасибо добрый человек и долгих лет тебе жизни :up очень выручил! Весь интернет облазил ничего по этой теме не нашел. Еще раз спасибо!

alpap 28-07-2016 01:22 2654682

Не проще сделать что-то типа такого и запускать через планировщик не реже раза в месяц, допустим в 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 2654715

alpap, а если по какой-либо причине первый бэкап месяца был сделан второго числа?

alpap 28-07-2016 08:37 2654723

Цитата:

Цитата megaloman
а если по какой-либо причине первый бэкап месяца был сделан второго числа? »

поэтому и
Цитата:

Цитата alpap
запускать через планировщик не реже раза в месяц, допустим в 00.00 1го числа, когда еще нет второго файла с числом 01 в имени »

+ можно доработать брать первый из найденных, иначе, если их уже будет более 2х, то кому нужны ежедневные бэкаты, если почти 3 месяца никто ничего не проверяет, кроме самих программ.

Tyamich 29-07-2016 10:09 2655113

Добрые люди, тут еще нужно батник один написать. Условие такое:

Создать батник, который на отдельную папку файлового сервера (SERVER) с сервера 1с ( 1CSRV) будет копировать только те бекапы БД , которые создаются на конец текущего/начало след. месяца (29-2 числа, с условием того, если бекап за 29 число не был сделан или найден, тогда на файловый сервер копируется бекап сделанный на следующий день). То есть сделать так что бы за этот промежуток времени с 29 по 2 число был скопирован только один бекап, просто с условием того что если не будет найден бекап за 29 число батник будет искать созданные на более поздние числа но не позднее 2 числа

Iska 29-07-2016 12:59 2655192

Tyamich, меня терзают смутные сомнения — не проще ли будет реализовать копирование сразу в момент создания бэкапа в том же задании?

Tyamich 29-07-2016 14:35 2655255

Iska так было бы еще лучше. Можешь написать ?

megaloman 29-07-2016 16:12 2655308

Tyamich, Какой смысл в 29 числе? Почему не последний бэкап месяца? С февралём Вы явно с 29 числом пролетаете. И, кстати, я бы сразу зарарил бы этот бэкап.

Tyamich 29-07-2016 17:10 2655332

ну пардон к примеру 31 и 1 числа. Просто дело в том что если допустим конец месяца выпадает на воскресенье то бекап не делается, у нас так задано, что в воскресенье на серваке 1С бекапы не проводятся. поэтому надо сделать так, что бы шло на следующее число. примерно так


Время: 07:34.

Время: 07:34.
© OSzone.net 2001-