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

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

Ответить
Настройки темы
CMD/BAT - Bat, который бы удалял все файлы, кроме созданных в начале каждого месяца.

Аватара для Tyamich

Пользователь


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


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

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


Собственно вопрос в названии темы. Задача стоит в следующем: Есть папка с бекапами баз данных с расширением .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

и так далее.

Надеюсь на скорый ответ

Отправлено: 12:37, 26-07-2016

 

Ветеран


Contributor


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

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


Код: Выделить весь код
@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 год - надеюсь этого достаточно

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 26-07-2016 в 18:20.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:13, 26-07-2016 | #2



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

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


Аватара для Tyamich

Пользователь


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

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


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

Отправлено: 09:47, 27-07-2016 | #3


Ветеран


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

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


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

Отправлено: 01:22, 28-07-2016 | #4


Ветеран


Contributor


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

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


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 08:21, 28-07-2016 | #5


Ветеран


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

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


Цитата megaloman:
а если по какой-либо причине первый бэкап месяца был сделан второго числа? »
поэтому и
Цитата alpap:
запускать через планировщик не реже раза в месяц, допустим в 00.00 1го числа, когда еще нет второго файла с числом 01 в имени »
+ можно доработать брать первый из найденных, иначе, если их уже будет более 2х, то кому нужны ежедневные бэкаты, если почти 3 месяца никто ничего не проверяет, кроме самих программ.

Отправлено: 08:37, 28-07-2016 | #6


Аватара для Tyamich

Пользователь


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

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


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

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

Отправлено: 10:09, 29-07-2016 | #7


Ветеран


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

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


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

Отправлено: 12:59, 29-07-2016 | #8


Аватара для Tyamich

Пользователь


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

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


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

Отправлено: 14:35, 29-07-2016 | #9


Ветеран


Contributor


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

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


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 16:12, 29-07-2016 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Удалить все файлы кроме kas1m Скриптовые языки администрирования Windows 20 03-08-2020 22:03
CMD/BAT - [решено] создать bat, который бы включал программу(либо вызывал её) и нажимал кнопку ENter argyman123 Скриптовые языки администрирования Windows 13 26-07-2016 12:18
Любой язык - [решено] Скрипт, который бы удалял во всех файлах из папки, кроме самого vbs скрипта, n5320 Скриптовые языки администрирования Windows 15 06-02-2015 17:43
CMD/BAT - bat файл который бы запускался на рабочей станции и копировал измененные файлы dramkos Скриптовые языки администрирования Windows 1 01-08-2014 05:53
CMD/BAT - чтобы батник автоматически удалял бы все подкаталоги, размер которых makc2364 Скриптовые языки администрирования Windows 1 19-12-2011 12:09




 
Переход