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

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

Ответить
Настройки темы
CMD/BAT - [решено] Копирование файлов бекапов из папок за 1,10,20 число каждого месяца

Новый участник


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

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


Доброго времени суток.
Есть папка Backup с подпапками, в которых хрняться бекапы разных баз.
Backup
Dakor
Dakor_backup_2017_11_08_001001_3006760.bak
........
Dakor_backup_2017_10_31_001001_3006760.bak
..........
Xakor
Xakor_backup_2017_11_08_001001_3075033.bak
Xakor_backup_2017_11_07_001001_3075033.bak
Нужно из всех подпапок скопировать в папку Decades все файлы за 10 и 20 число каждого месяца. В папку Months копировать файлы за 01 число каждого месяца. В папках Decades и Months подпапок нету.
После этого во всех подпапках папки Backup оставить файлы только за последние 10 дней.

Кусок с удалением файлов за последние 10 дней нашёл.
Придумал как копировать файлы за 20 число, дальше застрял.
Код: Выделить весь код
 for /r D:\BBB\Backup %%i in (*_20_*) do (xcopy /e "%%i" "D:\BBB\Decades")

Отправлено: 18:24, 16-11-2017

 

Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off

Call :CopyFile "Z:\Box_In\Backup\Dakor\Dakor_backup_20*.bak" "Z:\Box_Arc\Months" 01
Call :CopyFile "Z:\Box_In\Backup\Dakor\Dakor_backup_20*.bak" "Z:\Box_Arc\Decades" 10
Call :CopyFile "Z:\Box_In\Backup\Dakor\Dakor_backup_20*.bak" "Z:\Box_Arc\Decades" 20

Call :CopyFile "Z:\Box_In\Backup\Xakor\Xakor_backup_20*.bak" "Z:\Box_Arc\Months" 01
Call :CopyFile "Z:\Box_In\Backup\Xakor\Xakor_backup_20*.bak" "Z:\Box_Arc\Decades" 10
Call :CopyFile "Z:\Box_In\Backup\Xakor\Xakor_backup_20*.bak" "Z:\Box_Arc\Decades" 20

Call :DelFile "Z:\Box_In\Backup\Dakor\Dakor_backup_20*.bak" 10
Call :DelFile "Z:\Box_In\Backup\Xakor\Xakor_backup_20*.bak" 10

GoTo :Eof

:CopyFile
	FOR %%f IN ("%~1") DO (
		FOR /F "tokens=5 delims=_" %%d IN ("%%~nxf") DO (
			If %3==%%d  If Not Exist "%2\%%~nxf" Copy "%%f" "%2\" >nul
		)
	)
GoTo :Eof

:DelFile
	FOR /F "usebackq skip=%2 delims=" %%f IN (`dir "%~1" /b /A:-D /O:-N 2^>nul`) DO Del "%~dp1%%f"
GoTo :Eof
Сопируем файлы по указанным маскам за указанные дни в указанное место. Дни выделяем из имени.
Удаляем все файлы по указанной маске, кроме указанного числа самых "свежих". "Свежесть" определяем по имени файла.

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


Последний раз редактировалось megaloman, 17-11-2017 в 03:28.

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

Отправлено: 01:03, 17-11-2017 | #2



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

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


Ветеран


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

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


Код: Выделить весь код
@echo off
set "Backup=D:\Backup"
set "Months=C:\Months"
set "Decades=C:\Decades"
set "c1=01"& set "c10=10"& set "c20=20"
set "exp=bak"
set "dd=10"

pushd "%Backup%"
 for /f "tokens=1-5* delims=_" %%a in ('2^>nul dir /a-d/b/s "*.%exp%"') do (
  echo %%e|>nul findstr /x /c:"%c1%" && ((if not exist "%Months%" md "%Months%")& >nul copy "%%a_%%b_%%c_%%d_%%e_%%f" "%Months%")
  echo %%e|>nul findstr /x /c:"%c10%" /c:"%c20%" && ((if not exist "%Decades%" md "%Decades%")& >nul copy "%%a_%%b_%%c_%%d_%%e_%%f" "%Decades%")
 )
 for /f "delims=" %%A in ('dir /ad/b') do (
  pushd "%%A"
   for /f "delims=" %%a in ('dir /a-d/b/o-n "*.%exp%"^|more +%dd%') do del "%%a"
  popd
 )
popd
pause

Последний раз редактировалось alpap, 17-11-2017 в 03:03. Причина: Неправильно представил имена в подпапках

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

Отправлено: 02:17, 17-11-2017 | #3


Ветеран


Contributor


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

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


У alpap подсмотрел вариант, что возможно в папке Backup есть несколько подпапок, не обязательно только 2, указанные в вопросе, в которых имеются бэкапы, имена которых соответствуют приведенным в вопросе правилам. Тогда вот еще вариант:
Код: Выделить весь код
@Echo Off

Set "BoxIn=Z:\Box_In\Backup"
Set "BoxOut=Z:\Box_Arc"

FOR /F "usebackq delims=" %%i IN (`dir "%BoxIn%" /b /A:D 2^>nul`) DO Call :Folders "%BoxIn%" "%%i" "%BoxOut%"

GoTo :Eof

:Folders
	Call :CopyFile "%~1\%~2\%~2_backup_20*.bak" "%~3\Months" 01
	Call :CopyFile "%~1\%~2\%~2_backup_20*.bak" "%~3\Decades" 10
	Call :CopyFile "%~1\%~2\%~2_backup_20*.bak" "%~3\Decades" 20
	Call  :DelFile "%~1\%~2\%~2_backup_20*.bak" 10
GoTo :Eof

:CopyFile
	FOR %%f IN ("%~1") DO (
		FOR /F "tokens=5 delims=_" %%d IN ("%%~nxf") DO (
			If %3==%%d If Not Exist "%2\%%~nxf" Copy "%%f" "%2\" >nul
		)
	)
GoTo :Eof

:DelFile
	FOR /F "usebackq skip=%2 delims=" %%f IN (`dir "%~1" /b /A:-D /O:-N 2^>nul`) DO Del "%~dp1%%f"
GoTo :Eof
Кроме того, и в этом варианте, и в исправленном предыдущем учтено, что если бэкап уже скопирован, повторно он копироваться не будет.

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


Последний раз редактировалось megaloman, 17-11-2017 в 03:42.

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

Отправлено: 03:23, 17-11-2017 | #4


Новый участник


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

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


Спасибо. Да, в папке Backup может быть произвольное количество подпапок.

Последний раз редактировалось alevakr, 17-11-2017 в 11:04.


Отправлено: 10:52, 17-11-2017 | #5



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Копирование файлов из подкаталогов только за текущую дату. Чтец123 Скриптовые языки администрирования Windows 13 10-02-2017 12:19
CMD/BAT - Копирование файлов из разных папок yamixon Скриптовые языки администрирования Windows 0 14-12-2016 15:34
За три месяца выпущено восемь сборок Windows 10 Mobile OSZone News Новости и события Microsoft 0 11-03-2016 18:30
Доступ - Восстановление файлов за определённое число tvkorob Microsoft Windows 7 10 16-02-2016 16:12
CMD/BAT - Поиск и копирование определенных файлов из папок timbird Скриптовые языки администрирования Windows 13 22-02-2014 21:25




 
Переход