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

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

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

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


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

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


День добрый!
Прошу помощи подсказки в решении bat или PS следующей задачи:
имеется каталог с 10 000 вложенными каталогами
в большенстве из каталогов есть структура
- инфо_1
- инфо_2
и тут могут лежать файлы с именами



нужно чтобы файлы с именами
инфо_1_хххх лежали во вложенных каталогах инфо_1
инфо_2_хххх лежали во вложенных каталогах инфо_2
если такой каталог отсутствует, то его создать

пример
в папке 12131231
----подпапки
--------инфо_1
--------инфо_2
в её корне лежат файлы
инфо_1_хххх
инфо_2_хххх
инфо_3_хххх

должно получиться

в папке 12131231
----подпапки
--------инфо_1 в ней только файлы инфо_1_хххх
--------инфо_2 в ней только файлы инфо_2_хххх
созданная
--------инфо_3 в ней только файлы инфо_3_хххх

Отправлено: 15:11, 16-03-2021

 

Ветеран


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

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


Я правильно понимаю, что каталога:
Цитата mluxor:
----подпапки »
— не существует?

Приведите пример реальных имён файлов и каталогов.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:41, 16-03-2021 | #2



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

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


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


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

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


Цитата Iska:
риведите пример реальных имён файлов и каталогов. »
Код: Выделить весь код
d:\MartStorage\70070\Анкета\
d:\MartStorage\70070\Договор\
d:\MartStorage\70070\ИДС\
d:\MartStorage\70070\План\
d:\MartStorage\70070\Съемка\
d:\MartStorage\70070\Фото\
d:\MartStorage\70070\70070зос.pdf
d:\MartStorage\70070\70070 анк.jpg
d:\MartStorage\70070\70070_anketa_01_20200116_15-08-19.jpg
d:\MartStorage\70070\70070_ppltr_01_20190803_11-24-55.jpg
d:\MartStorage\70070\70070_vsgrf_01_20191109_12-01-14.png
d:\MartStorage\70070\70070_ppltr_01_20190803_11-25-01.jpg
d:\MartStorage\70070\70070_vsgrf_01_20190907_09-53-38.png
d:\MartStorage\70070\70070_ct_01_20190803_11-24-16.png
d:\MartStorage\70070\70070_vsgrf_01_20190817_16-12-00.png
d:\MartStorage\70070\70070_ppltr_01_20190726_22-19-22.jpg
d:\MartStorage\70070\70070_vsgrf_01_20190724_16-07-54.png
d:\MartStorage\70070\70070_vsgrf_01_20190110_09-47-32.png
d:\MartStorage\70070\70070_vsgrf_01_20180709_18-04-00.png
d:\MartStorage\70070\70070_vsgrf_01_20180709_17-08-10.png
d:\MartStorage\70070\70070_ppltr_01_20180112_18-24-24.jpg
d:\MartStorage\70070\70070з.jpg
d:\MartStorage\70070\70070с.jpg
d:\MartStorage\70070\70070о.jpg
vsgrf - в съемку
ppltr - в план
anketa - в анкета
70070з 70070с 70070о - в договор

_ct_ - в создаваемую Контроль.

Но в каталоге может отсутствовать папка "съемка" или "план"

Спасибо!

Отправлено: 08:01, 17-03-2021 | #3


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


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

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


Цитата megaloman:
Всё страньше и страньше: что связывает имя файла vsgrf и папки Съемка, ppltr и План»
связывает соответствие всех файлов у которых в имени vsgrf с необходимостью поместить в папку Съемка.
Аналогично и с ppltr и План.

Цитата megaloman:
что Вы подразумевали под Инфо1, Ирфо2 в постановке задачи? »
Подразумевал отбор если в имени файла содержится "инфо_1" (инфо_1_хххх.pdf инфо_1_хххх.jpg) перемещать его в папку ИНФО_1

Отправлено: 09:56, 17-03-2021 | #4


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=D:\MartStorage\70070"
	Call :MyMove "%BoxIn%" "_vsgrf_*.*" "Съемка"
	Call :MyMove "%BoxIn%" "_ppltr_*.*" "План"
	Call :MyMove "%BoxIn%" "_anketa_*.*" "Анкета"
	Call :MyMove "%BoxIn%" "_ct_*.*" "Контроль"
	Call :MyMove "%BoxIn%" "*.*" "Договор"
pause
Exit /B

:MyMove
	If Not Exist "%~1\%~3" Md "%~1\%~3"
	>nul Move /Y "%~1\%~n1%~2" "%~1\%~3\"
Exit /B
Батник сохранить в 866 кодировке.
Путь указать без \ на конце
Договор сделать последним, так как там нет ключевого слова кроме префикса - имени папки.

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


Отправлено: 10:29, 17-03-2021 | #5


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


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

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


Цитата megaloman:
Батник сохранить в 866 кодировке. »
BAT-ник обабатывает только
BoxIn=D:\MartStorage\70070"

Подскажите, что поправить, чтобы он обрабатывал вложенные в D:\MartStorage\ ?

Отправлено: 11:05, 17-03-2021 | #6


Ветеран


Contributor


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

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


mluxor,
Цитата Iska:
Приведите пример реальных имён файлов и каталогов. »
Как привели, так и получили.
Цитата mluxor:
что поправить, чтобы он обрабатывал вложенные в D:\MartStorage\ ? »
Объяснить задачу, чтобы не пришлось домысливать.
Объясните, что такое вложенные папки, какая их структура, что в результате надо получить? Пытаюсь домыслить:

Есть папка, например:
d:\MartStorage

В ней есть подпапки, например:
D:\MartStorage\70070
D:\MartStorage\70071
D:\MartStorage\70072
D:\MartStorage\70073
Попутно вопрос: у этих подпапапок имена только из цифр?

Вложенные в них подпапки не рассматриваются, так как это, например:
Съемка
План
Анкета
Контроль
Договор

Соответствие имен файлов и внутренних подпапок одинаково для всех папок:
"имяподпапки_vsgrf_*.*" --> "Съемка"
"имяподпапки_ppltr_*.*" --> "План"
"имяподпапки_anketa_*.*" --> "Анкета"
"имяподпапки_ct_*.*" --> "Контроль"
"имяподпапки*.*" --> "Договор"

При такой постановке:
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=D:\MartStorage"
	For /f "usebackq delims=" %%d In (`2^>nul Dir "%BoxIn%\" /B /A:D`) Do (Set "Box=%BoxIn%\%%d"
		Call :MyMove "%%Box%%" "_vsgrf_*.*" "Съемка"
		Call :MyMove "%%Box%%" "_ppltr_*.*" "План"
		Call :MyMove "%%Box%%" "_anketa_*.*" "Анкета"
		Call :MyMove "%%Box%%" "_ct_*.*" "Контроль"
		Call :MyMove "%%Box%%" "*.*" "Договор"
	)
pause
Exit /B

:MyMove
	If Not Exist "%~1\%~3" Md "%~1\%~3"
	>nul Move /Y "%~1\%~n1%~2" "%~1\%~3\"
Exit /B
Если имена подпапок должны быть только из цифр, то For, для контроля, можно записать как:
Код: Выделить весь код
	For /f "usebackq delims=" %%d In (`2^>nul Dir "%BoxIn%\" /B /A:D ^| findstr.exe /R /C:"^[0-9]*$"`) Do (Set "Box=%BoxIn%\%%d"

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


Последний раз редактировалось megaloman, 17-03-2021 в 15:02.

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

Отправлено: 14:48, 17-03-2021 | #7



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Разработать пакетный файл для перехода студента в личный каталог new__christmas@vk Скриптовые языки администрирования Windows 3 31-10-2017 15:32
CMD/BAT - [решено] как скопировать нужный файл в нужную папку с помощью bat Survover Скриптовые языки администрирования Windows 10 18-01-2017 22:47
Утилиты - Dr.Web удалил нужный мне файл. silalex Защита компьютерных систем 9 07-05-2013 10:30
Установка - Нужный файл находится на сетевом ресурсе, который сейчас недоступен Per7ik Microsoft Windows 7 2 26-09-2010 13:54
Разное - Что делать, если Вы удалили нужный файл (и хотите его восстановить)? Котяра Microsoft Windows 2000/XP 0 18-10-2008 20:55




 
Переход