|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Сортировка файлов по папкам |
|
CMD/BAT - [решено] Сортировка файлов по папкам
|
Новый участник Сообщения: 10 |
Добрый день Товарищи!
Нужна ваша помощь в написании скрипта, испробовал различные варианты с разных форумов, не могу найти решение для своей задачи. Есть главная директория, в которой содержаться папки соответствующие названию серверов, в этих папках содержаться папки с названиями БД для каждого сервера и уже в каждой папке с БД содержаться zip файлы имена которых соответствует следующей маски "Имя БД_ДД-ММ-ГГГГ_ччмм.zip" (в именах также могут быть "пробелы"), скрин 1: ![]() Все папки и файлы создаются автоматически по определенному скрипту, обновляются и дополняются каждый день. В папках с БД накопилось много архивов и будут копиться дальше, хотелось бы автоматически сортировать все zip файлы. Нужно чтобы скрипт заходил в каждую папку с БД, перебирал список файлов, определял дату создания файлов каждой папки (в названии файла тоже есть дата создания, можно по маске из имени файла) и создавал папки "ГГГГ", затем внутри "ММ" в каждой конечной папке и далее перемещал все zip файлы в соответствующую папку с "ГГГГ\ММ", скрин 2: ![]() Перебрал много разных вариантов, уже совсем запутался. Буду весьма признателен сообществу единомышленников за помощь! Всем хорошего дня! |
|
Отправлено: 20:03, 25-01-2022 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Постановка:
Есть "Директория\Папка" В ней файлы "Директория\Папка\Папка_ДД-ММ-ГГГГ_ччмм.zip" Их надо рассортировать по подпапкам: "Директория\Папка\ГГГГ\ММ\Папка_ДД-ММ-ГГГГ_ччмм.zip" Если это так, то: @Echo Off cls Call :MySort "Z:\Box_Arc\APPV012\Leak Detection System" Call :MySort "Z:\Box_Arc\APPV012\PTM for HVAC" Call :MySort "Z:\Box_Arc\UATV021\Flert" pause Exit /B :MySort FOR /L %%y IN (2000,1,2050) DO For %%m In (01 02 03 04 05 06 07 08 09 10 11 12) Do ( If Exist "%~1\%~nx1_??-%%m-%%y_????.zip" ( 2>nul Md "%~1\%%y\%%m" >nul Move "%~1\%~nx1_??-%%m-%%y_????.zip" "%~1\%%y\%%m\" ) ) Exit /B Чтобы не возиться с выделением из имен года и месяца, забил диапазон годов 2000 ... 2050 Для времени выполнения, ИМХО, это несущественно |
------- Последний раз редактировалось megaloman, 26-01-2022 в 00:38. Отправлено: 00:26, 26-01-2022 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 20132
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
В 2500 не пробовали заглянуть? |
|
------- Отправлено: 03:01, 26-01-2022 | #3 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать megaloman, спасибо вам огромное за ваш труд!
Скрипт отлично обрабатывает содержимое папок и перемещает все файлы по соответствующим каталогам, скрин 3: ![]() Вопрос для уточнения, можно ли не в явном виде объявлять пути к конечным проверяемым папкам? Кол-во папок с названиями серверов могут меняться, особенно сами конечные папки с названиями БД. В разных папках, разное кол-во и они периодически добавляются, скрин 4: ![]() Добавлять их постоянно вручную в скрипт трудоемко. Можно ли добавить возможность указывать например только изначальную папку откуда нужно начинать проверку, а скрипт сам заходил бы в каждую папку с сервером, далее в ней разное кол-во папок с названиями БД, заходил бы по очереди в каждую папку с названием БД. Далее делал то что было реализовано с файлами и каталогами. Заранее благодарю. |
Отправлено: 08:34, 26-01-2022 | #4 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать @Echo Off
cls
Set "BoxArc=Z:\_Auto_Export_AF_DB_\Scripts\Sorting_Files_Info_Folders\AF_DB_Backup"
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETime /VALUE') DO Set "YYYY2=%%d"
Set /A YYYY2=%YYYY2:~0,4%
Set /A YYYY1=%YYYY2%-1
FOR /F "usebackq delims=" %%d In (`2^>nul Dir /B /A:D /S "%BoxArc%"`) DO If Exist "%%d\%%~nxd_??-??-2???_????.zip" (
FOR /L %%y IN (%YYYY1%,1,%YYYY2%) DO For %%m In (01 02 03 04 05 06 07 08 09 10 11 12) Do (
If Exist "%%d\%%~nxd_??-%%m-%%y_????.zip" (
2>nul Md "%%d\%%y\%%m"
>nul Move "%%d\%%~nxd_??-%%m-%%y_????.zip" "%%d\%%y\%%m\"
)
)
)
pause
Exit /B
Цитата yurfed:
Чтобы не напрягало, сделал просмотр текущего года и предыдущего (актуально в начале года) Если, как разовая акция и нужно несколько предыдущих лет, то измените Set /A YYYY1=%YYYY2%-1 -1 на количество предыдущих годов. |
||
------- Последний раз редактировалось megaloman, 26-01-2022 в 10:09. Отправлено: 09:26, 26-01-2022 | #5 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать megaloman, спасибо вам огромнейшее!!!
![]() ![]() ![]() Ваш скрипт отлично работает, все "Как доктор прописал!!!". Прописал только путь к главной директории, далее скрипт обработал все внутренние каталоги и переместил файлы по каталогам, скрин 05: ![]() Осталось только адаптировать в алгоритм текущего сценария, но это уже "мелочи жизни". Спасибо вам еще раз огромное! Крепкого всем Здоровья и работоспособных сервисов/систем/скриптов!)) Хорошего дня!!! ![]() |
Отправлено: 10:11, 26-01-2022 | #6 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] сортировка файлов по папкам | xumuk_32 | Скриптовые языки администрирования Windows | 4 | 15-09-2020 15:09 | |
PowerShell - Сортировка файлов по папкам | victor21043 | Скриптовые языки администрирования Windows | 2 | 12-09-2016 23:17 | |
[решено] Сортировка входящих по папкам gmail | jorikello | Хочу все знать | 1 | 30-12-2015 16:48 | |
Интерфейс - [решено] Автоматическая сортировка файлов по папкам | kako12 | Microsoft Windows 8 и 8.1 | 8 | 08-06-2013 21:07 | |
CMD/BAT - сортировка файлов по папкам по дате в названии | insearches | Скриптовые языки администрирования Windows | 1 | 03-02-2013 17:03 |
|