Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 07.08.2021
Сообщений: 20

Создание папки с названием из имени файла (без учета нумерации файлов)

07.08.2021, 20:30. Показов 5568. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется множество каталогов следующего вида:

D:\Files\20210512_Москва\
Петровский_АВ.rar
Петровский_АВ (1).rar
Петровский_АВ (2).rar

D:\Files\20210614_Москва\
Петровский_АВ.rar
Петровский_АВ (1).rar

Названия повторяющихся файлов дополнены порядковым номеров в скобках через пробел после фамилии.

Нужно организовать перемещение файлов в единый каталог, в котором должны создаваться новые папки с ФИО.

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

Ожидаемый результат:
D:\Единый_Каталог\Петровский_АВ\Петровск ий_АВ_20210512_Москва.rar
D:\Единый_Каталог\Петровский_АВ\Петровск ий_АВ (1)_20210512_Москва.rar
D:\Единый_Каталог\Петровский_АВ\Петровск ий_АВ (2)_20210512_Москва.rar
D:\Единый_Каталог\Петровский_АВ\Петровск ий_АВ_220210614_Москва.rar
D:\Единый_Каталог\Петровский_АВ\Петровск ий_АВ (1)_20210614_Москва.rar

Не могу понять как запихать в переменную ФИО без цифр для создания папки. По идее признак для создаваемой папки - отсутствие символа кавычек или пробела в имени файла.
И как добавить в переменную название каталога, в котором лежат файлы?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.08.2021, 20:30
Ответы с готовыми решениями:

Распределение файлов из папки по части имени файла в папки, содержащие файлы с похожим именем (квитовка)
Добрый день! Искал по форуму, но мне не удалось найти похожее решение. К примеру имеется каталог K:\365P\notdefined. В нем находятся...

Создание папок по имени файлов и перемещение этих файлов в созданные папки
Господа, прошу помощи. В батниках полный ноль Имеется папка с множеством файлов, скриншот во вложении Эти файлы относятся к...

Создание папки по имени файла и перемещение файла в эту папку
Добрый день , Помогите пожалуйста с батником. У меня есть целая куча файлов в одной папке, такаго образца P_434308546FM.JPG ...

9
6994 / 2880 / 1108
Регистрация: 06.06.2017
Сообщений: 9,775
08.08.2021, 00:27
Лучший ответ Сообщение было отмечено STM88 как решение

Решение

Цитата Сообщение от STM88 Посмотреть сообщение
признак для создаваемой папки - отсутствие символа кавычек или пробела в имени файла.
Отсутствие классических кавычек — это признак для любого имени в ФС, а пробел, как мы видим, таки имеется.

Нужно искать rar-файлы c Имя_ИО в начале? Или они все такие по глубине папок?

Ладно, пусть будет поиск. Батник в OEM 866:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
@echo off&setlocal enabledelayedexpansion
set odir=D:\Files
set tdir=D:\Единый_Каталог
for /f "delims= eol=" %%f in ('dir/a-d/b/s %odir%^|findstr/erc:"\\[А-Я][а-я]*_[А-Я][А-Я][_ ]*[^\\]*\.rar"') do (
  for %%i in ("%%~pf.") do set "pdir=%%~nxi"
  for /f "tokens=1,2 delims=_ " %%n in ('echo %%~nf') do (
    set "ndir=%tdir%\%%~nn_%%o" &if not exist "!ndir!" >nul md "!ndir!"
    >nul move "%%f" "!ndir!\%%~nf_!pdir!%%~xf"
    where/q /r "%%~dpf" * || rd /q/s "%%~dpf"
  )
)
1
0 / 0 / 0
Регистрация: 07.08.2021
Сообщений: 20
08.08.2021, 05:00  [ТС]
Цитата Сообщение от FlasherX Посмотреть сообщение
Нужно искать rar-файлы c Имя_ИО в начале? Или они все такие по глубине папок?
Всё верно. Глубина папок фиксированная, имена файлов и папок задаются автоматически (отклонения от шаблона исключены).

Спасибо за Ваш ответ! Отличный код, правда в конце возникает небольшая проблема:

В каталог "D:\Единый_Каталог\Фамилия_ИО" перемещается только один файл (первый), остальные файлы "не найдены" (судя по всему из-за rd). Для меня это не критично, убрал rd, пустые папки затру отдельной строкой кода.

И еще возникает синтаксическая ошибка "пoтерян aргумент по умoлчанию", отсылает к хэлпу "where /?".
Вот тут сомнения, насколько это критично? Несмотря на ошибку, скрипт свою задачу на кусочке тестовых данных выполнил, но все ли пройдет гладко на живых данных, сам факт возникновения ошибки настораживает.
0
6994 / 2880 / 1108
Регистрация: 06.06.2017
Сообщений: 9,775
08.08.2021, 06:20
Цитата Сообщение от STM88 Посмотреть сообщение
Всё верно. ... отклонения от шаблона исключены
А что тут верно-то в контексте "или"? Нет других файлов, кроме этих? Тогда в 4 строке можно смело удалять ^|findstr/erc:"\\[А-Я][а-я]*_[А-Я][А-Я][_ ]*[^\\]*\.rar".

Цитата Сообщение от STM88 Посмотреть сообщение
убрал rd
Не надо. Форум при публикации частенько бэкслэши трёт. В данном случае перед второй кавычкой: ... /r "%%~dpf\" *....
А я ещё думаю, почему 9 строка на символ короче.
1
0 / 0 / 0
Регистрация: 07.08.2021
Сообщений: 20
08.08.2021, 11:00  [ТС]
Вы правы, спасибо за помощь!

Добавлено через 3 часа 57 минут
FlasherX, Я обнаружил на старых данных, что даты в названиях папок не соответствуют фактическим (видимо, папки какое-то время именовались вручную). Но корректные даты указаны в дате изменения файлов.

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

По идее из названия папки нужно указать только [А-Я][а-я] и символ "-" для некоторых городов?

Шаблон ожидаемого имени как и в первом посте: "Петровский_АВ (1)_20210512_Москва.rar"
0
6994 / 2880 / 1108
Регистрация: 06.06.2017
Сообщений: 9,775
08.08.2021, 11:48
Цитата Сообщение от STM88 Посмотреть сообщение
нужно указать только [А-Я][а-я] и символ "-" для некоторых городов?
Это не для городов, а для Фамилия_ИО. Тут, судя по ответу, поиск по шаблону и не нужен:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off&setlocal enabledelayedexpansion
set odir=D:\Files
set tdir=D:\Единый_Каталог
for /f "delims= eol=" %%f in ('dir %odir%\*.rar /a-d/b/s') do (
  for %%i in ("%%~pf.") do set "pdir=%%~nxi"
  for /f "tokens=1-3 delims=. " %%a in ('echo %%~tf') do set d=%%c%%b%%a
  for /f "tokens=2 delims=_" %%d in ('echo !pdir!') do set pdir=!d!_%%d
  for /f "tokens=1,2 delims=_ " %%n in ('echo %%~nf') do (
    set "ndir=%tdir%\%%~nn_%%o" &if not exist "!ndir!" >nul md "!ndir!"
    >nul move "%%f" "!ndir!\%%~nf_!pdir!%%~xf"
    where/q /r "%%~dpf\" * || rd /q/s "%%~dpf"
  )
)
Только нужно иметь в виду, что имена и даты в подпапках совпадать не должны.
1
0 / 0 / 0
Регистрация: 07.08.2021
Сообщений: 20
08.08.2021, 13:02  [ТС]
Цитата Сообщение от FlasherX Посмотреть сообщение
Только нужно иметь в виду, что имена и даты в подпапках совпадать не должны.
К сожалению, совпадение имен имеется. В итоге из 6 тестовых файлов в "Единый_Каталог" перемещены только три.

Добавлено через 5 минут
Цитата Сообщение от FlasherX Посмотреть сообщение
Это не для городов, а для Фамилия_ИО. Тут, судя по ответу, поиск по шаблону и не нужен:
В вашем примере это было для ФИО. А я предложил возможный метод к предыдущей задаче как убрать дату из названия папки, оставив только буквенные символы.

Добавлено через 2 минуты
Цитата Сообщение от FlasherX Посмотреть сообщение
Только нужно иметь в виду, что имена и даты в подпапках совпадать не должны.
Может быть добавить к файлу новый счетчик? красота названия файла не столь важна, главное чтобы все файлы были перемещены и дата в имени была корректная.
0
6994 / 2880 / 1108
Регистрация: 06.06.2017
Сообщений: 9,775
08.08.2021, 14:29
STM88, так это ваша идея была, подставлять даты из файлов. Значит, совпадение есть и по датам. Теперь см. совпадение по времени. Тоже есть? И смотреть дату/время надо не в тестовых файлах, а в целевых.
Цитата Сообщение от STM88 Посмотреть сообщение
Может быть добавить к файлу новый счетчик? ... и дата в имени была корректная.
А зачем при счётчике тогда вообще дата с городом, если целью было?:
Цитата Сообщение от STM88 Посмотреть сообщение
чтобы файлы с одинаковыми названиями не подменили друг друга, к названию файла хотелось бы добавить дату и город из названия каталога.
0
0 / 0 / 0
Регистрация: 07.08.2021
Сообщений: 20
08.08.2021, 16:15  [ТС]
FlasherX, ваши труды не напрасны, мне понравился ваш код и я буду его использовать. Спасибо вам большое! Тем более на новых файлах все отлично, а их подавляющее большинство. На старых файлах вышла накладочка, ну не страшно, утилитами подправлю вручную, придется повозится, ну ничего.
Я сам виноват, все сразу не проверил и сформировал задание не корректно.
0
6994 / 2880 / 1108
Регистрация: 06.06.2017
Сообщений: 9,775
08.08.2021, 19:52
STM88, дело не только в напрасности трудов, но и в ответах на мои вопросы. Про совпадение времени я спрашиваю, чтобы подставлять yyyyMMddHHmmss. Если есть совпадающие таймкоды в файлах с совпадающими именами, то проще сразу было копировать по счётчику вместо запрошенных окончаний. Про копирование/перемещение по счётчику тут полно тем.
Но если всё и так устраивает, то пожалуйста, конечно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.08.2021, 19:52
Помогаю со студенческими работами здесь

CMD. Создание папки с названием равным типу уже имеющегося файла в том месте где создана папка
у меня пока есть только вот эта строчка которая записана в "пакетный файл Windows" : if exist %cd%\lol\*.txt md %cd%\lol\txt ...

Создание папки по части имени файла
Помогите сделать форму. Должно получиться: Выбираем файл (в моем случае это .pdf), название отображается в textbox, выбираем место...

Создание папки, запоминание имени файла
Здравствуйте! Помогите, пожалуйста, со следующими проблемами (заранее прошу прощения, если элементарщина - в хелпе и Нете не нашла): ...

Регуляркой вырезать путь до последней папки, без имени файла
Есть адреса нужна регулярка, чтобы работала на адреса, типа: https://www.cyberforum.ru/vb-net/thread1061235.html ...

Создание (сохранение) файла без перезаписи с добавлением цифры к имени файла
Как реализовать в программе возможность сохранения файла без удаления старого(одноимённого файла) Например. Когда я вручную создаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru