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

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

Ответить
Настройки темы
CMD/BAT - [решено] Сортировка файлов по папкам

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


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

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


Изображения
Тип файла: png Screen_01.png
(69.7 Kb, 3 просмотров)
Тип файла: png Screen_02.png
(176.5 Kb, 2 просмотров)
Добрый день Товарищи!

Нужна ваша помощь в написании скрипта, испробовал различные варианты с разных форумов, не могу найти решение для своей задачи.

Есть главная директория, в которой содержаться папки соответствующие названию серверов, в этих папках содержаться папки с названиями БД для каждого сервера и уже в каждой папке с БД содержаться zip файлы имена которых соответствует следующей маски "Имя БД_ДД-ММ-ГГГГ_ччмм.zip" (в именах также могут быть "пробелы"), скрин 1:



Все папки и файлы создаются автоматически по определенному скрипту, обновляются и дополняются каждый день.
В папках с БД накопилось много архивов и будут копиться дальше, хотелось бы автоматически сортировать все zip файлы.

Нужно чтобы скрипт заходил в каждую папку с БД, перебирал список файлов, определял дату создания файлов каждой папки (в названии файла тоже есть дата создания, можно по маске из имени файла) и создавал папки "ГГГГ", затем внутри "ММ" в каждой конечной папке и далее перемещал все zip файлы в соответствующую папку с "ГГГГ\ММ", скрин 2:



Перебрал много разных вариантов, уже совсем запутался. Буду весьма признателен сообществу единомышленников за помощь!
Всем хорошего дня!

Отправлено: 20:03, 25-01-2022

 

Ветеран


Contributor


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

Профиль | Отправить 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



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

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


Аватара для yurfed

Ветеран


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

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


Цитата megaloman:
забил диапазон годов 2000 ... 2050 »
Круто смотрим в будущее.
В 2500 не пробовали заглянуть?

-------
Хочу ли я - Могу ли я - Говно ли я - Магнолия


Отправлено: 03:01, 26-01-2022 | #3


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


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

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


Изображения
Тип файла: png Screen_03.png
(109.7 Kb, 1 просмотров)
Тип файла: png Screen_04.png
(145.0 Kb, 1 просмотров)

megaloman, спасибо вам огромное за ваш труд!
Скрипт отлично обрабатывает содержимое папок и перемещает все файлы по соответствующим каталогам, скрин 3:



Вопрос для уточнения, можно ли не в явном виде объявлять пути к конечным проверяемым папкам?
Кол-во папок с названиями серверов могут меняться, особенно сами конечные папки с названиями БД. В разных папках, разное кол-во и они периодически добавляются, скрин 4:



Добавлять их постоянно вручную в скрипт трудоемко.
Можно ли добавить возможность указывать например только изначальную папку откуда нужно начинать проверку, а скрипт сам заходил бы в каждую папку с сервером, далее в ней разное кол-во папок с названиями БД, заходил бы по очереди в каждую папку с названием БД. Далее делал то что было реализовано с файлами и каталогами.

Заранее благодарю.

Отправлено: 08:34, 26-01-2022 | #4


Ветеран


Contributor


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

Профиль | Отправить 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:
Круто смотрим в будущее.
В 2500 не пробовали заглянуть? »
"Народу русскому пределы не поставлены!"
Чтобы не напрягало, сделал просмотр текущего года и предыдущего (актуально в начале года)
Если, как разовая акция и нужно несколько предыдущих лет, то измените
Set /A YYYY1=%YYYY2%-1
-1 на количество предыдущих годов.

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


Последний раз редактировалось megaloman, 26-01-2022 в 10:09.

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

Отправлено: 09:26, 26-01-2022 | #5


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


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

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


Изображения
Тип файла: png Screen_05.png
(127.2 Kb, 2 просмотров)

megaloman, спасибо вам огромнейшее!!!

Ваш скрипт отлично работает, все "Как доктор прописал!!!".

Прописал только путь к главной директории, далее скрипт обработал все внутренние каталоги и переместил файлы по каталогам, скрин 05:



Осталось только адаптировать в алгоритм текущего сценария, но это уже "мелочи жизни".

Спасибо вам еще раз огромное!

Крепкого всем Здоровья и работоспособных сервисов/систем/скриптов!))

Хорошего дня!!!

Отправлено: 10:11, 26-01-2022 | #6



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход