Войти

Показать полную графическую версию : [решено] файл в нужный каталог


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



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

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

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

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

Iska
16-03-2021, 16:41
Я правильно понимаю, что каталога:
----подпапки »
— не существует?

Приведите пример реальных имён файлов и каталогов.

mluxor
17-03-2021, 08:01
риведите пример реальных имён файлов и каталогов. »


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_ - в создаваемую Контроль.

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

Спасибо!

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

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

megaloman
17-03-2021, 10:29
@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 кодировке.
Путь указать без \ на конце
Договор сделать последним, так как там нет ключевого слова кроме префикса - имени папки.

mluxor
17-03-2021, 11:05
Батник сохранить в 866 кодировке. »
BAT-ник обабатывает только
BoxIn=D:\MartStorage\70070"

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

megaloman
17-03-2021, 14:48
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"




© OSzone.net 2001-2012