|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Копирование файлов бекапов из папок за 1,10,20 число каждого месяца |
|
CMD/BAT - [решено] Копирование файлов бекапов из папок за 1,10,20 число каждого месяца
|
Новый участник Сообщения: 2 |
Доброго времени суток.
Есть папка 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 число, дальше застрял. |
|
Отправлено: 18:24, 16-11-2017 |
Ветеран Сообщения: 2728
|
Профиль | Отправить 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
|
Профиль | Отправить 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 |
Ветеран Сообщения: 2728
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Спасибо. Да, в папке Backup может быть произвольное количество подпапок.
|
|
Последний раз редактировалось alevakr, 17-11-2017 в 11:04. Отправлено: 10:52, 17-11-2017 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|