2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Как поменять местами части имени многих файлов в Виндовс?
Сообщение08.08.2021, 12:37 
Аватара пользователя


13/02/18
1070
Україна, село
Есть файлы определенного формата в определенной папке. Имена примерно такие...

Код:
BLA-BLA-BLA_1-seriya-PLA-PLA-PLA-PLA.mp4
BLA-BLA-BLA_24-seriya-PLA-PLA-PLA.mp4

А мне надо следующее...

Код:
PLA-PLA-PLA-PLA_1-seriya-_BLA-BLA-BLA.mp4
PLA-PLA-PLA_24-seriya-_BLA-BLA-BLA.mp4

Я могу переминировать кучу файлов с помощью программы "Command Prompt", и команды "ren" там, но как поменять местами части имен то?

П. С. Заранее спасибо за ответы!

 Профиль  
                  
 
 Re: Как поменять местами части имени многих файлов в Виндовс?
Сообщение08.08.2021, 15:18 
Заслуженный участник


20/08/14
11170
Россия, Москва
Если имена более-менее регулярные, то при присвоении командой set в bat/cmd файле переменной нового значения можно заменить подстроку на другую или вырезать из строки несколько символов (вместо %PATH из примеров ниже в командных файлах можно использовать и %1):
set /? писал(а):
Подстановка переменной среды может быть расширена следующим образом:

%PATH:str1=str2%

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


Можно также использовать строки расширения.

%PATH:~10,5%

расширит действие переменной среды PATH, затем использует только 5
символов, которые начинаются с 11-го символа (пропустив 10) расширенного
результата. Если длина не указана, по умолчанию используется оставшееся
значение переменной. Если оба значения (длина и число пропускаемых символов)
отрицательны, следующим используемым значением будет длина значения переменной
среды, добавленной к указанному значению пропуска или указанной длины.

%PATH:~-10%

извлечет последние 10 символов переменной PATH.

%PATH:~0,-2%

извлечет все символы переменной PATH, за исключением 2-х последних.
Выполнив несколько раз это для исходной строки можно разбить исходное имя на кусочки и затем из них склеить новое имя в нужном порядке и переименовать файл.

А, ну да, чтобы ручками не писать миллион ren разумеется можно использовать for для перебора всех файлов. И внутри цикла обрабатывать строго один файл, без всяких макроподстановок, это надёжнее и проще проверить результат заранее.

PS. Очень рекомендую до полной отладки работы команд вместо ren file1 file2 писать echo ren file1 file2 и внимательно изучать что и как именно будет в итоге переименовываться.

 Профиль  
                  
 
 Bulk Rename Utility
Сообщение08.08.2021, 16:56 
Аватара пользователя


10/10/18
740
At Home
Bulk Rename Utility и подобные.

http://old-dos.ru/index.php?page=files&mode=files&do=show&id=6739

Вам понадобится RegEx (слева поля). Справка там есть.

 Профиль  
                  
 
 Re: Как поменять местами части имени многих файлов в Виндовс?
Сообщение08.08.2021, 17:07 
Заслуженный участник


20/08/14
11170
Россия, Москва
Если в частях BLA и PLA не встречается символов "-_.", то можно и по другому: побить всё имя на кусочки с разделителями "-_." и потом собрать новое имя из этих кусочков. Здесь не придётся считать длину в символах и корректно обработаются многозначные номера серий.
Пример для переименования первой группы файлов (запускать из командной строки, не из bat/cmd файла): for %z in (BLA-BLA-BLA_*-seriya-PLA-PLA-PLA-PLA.mp4) do @for /f "tokens=1-10 delims=-_." %a in ("%z") do @echo ren %a-%b-%c_%d-%e-%f-%g-%h-%i.%j %f-%g-%h-%i_%d-%e-_%a-%b-%c.%j

-- 08.08.2021, 17:15 --

Пример с подсчётом символов для первой группы файлов для серий 1-9, содержимое t.cmd, с отладочным выводом, реально нужны только команды set (потому что %1 использовать для деления на подстроки оказывается нельзя, был не прав) и ren:
Используется синтаксис Text
@echo off
rem Покажем исходное имя и разбиение его на кусочки
echo %1
set f=%~n1%
echo %f:~0,11%
echo %f:~12,9%
echo %f:~21,15%
echo %~x1%
rem Покажем во что будет переименовано
echo %f:~21,15%_%f:~12,9%_%f:~0,11%%~x1%
rem Покажем полную команду переименования
echo ren %1 %f:~21,15%_%f:~12,9%_%f:~0,11%%~x1%
Запускать из командной строки так: for %p in (BLA-BLA-BLA_?-seriya-PLA-PLA-PLA-PLA.mp4) do t.cmd %p

 Профиль  
                  
 
 Re: Как поменять местами части имени многих файлов в Виндовс?
Сообщение08.08.2021, 23:28 


05/09/16
11522
frostysh в сообщении #1528314 писал(а):
Я могу переминировать кучу файлов с помощью программы "Command Prompt", и команды "ren" там, но как поменять местами части имен то?

Надо получить имена в какие-то строки, и над строками сделать вычисления. Потом переимновать исходные файлы в файлы с вычисленными именами.
По рабоче-крестьянски, без п ратства и всего такого, я лет 20 назад делал так.
Запускаем команду dir и то что она выводит (имена файлов) копипастим в столбец эксель (в вашем случае это будет Calc из состава LibreOffice).
Дальше формулой меняем местами символы, добавляем и т.п., делаем второй столбец с целевым именем.
Ну и дальше делаем команду ren в третьем столбце.
Потом этот третий столбец копипастим в текстовый файл, даем ему расширение .bat и запускаем.
Это если все файлы в одной директории. Если надо рекрусивно по многим, это следующий уровень квеста, пройдите сперва этот.
Ну это я делал до того как нашел подходящую программу. Метод наглядный - вы видите, что получается до того, как переименуете, все под контролем. Если работы такой много, у вас может возникнуть мысль "и почему люди не придумали регулярные выражения". Гоните её, это ещё на месяц вам погружения.
Список файлов в текстовый файл dir.txt делается навроде как вот так: dir /b > dir.txt

 Профиль  
                  
 
 Re: Как поменять местами части имени многих файлов в Виндовс?
Сообщение09.08.2021, 07:01 
Аватара пользователя


10/10/18
740
At Home
wrest в сообщении #1528370 писал(а):
...это я делал до того как нашел подходящую программу. Метод наглядный - вы видите, что получается до того, как переименуете, все под контролем.
В вышерекомендованной программе тоже всё видно до переименования, плюс есть кнопка "всё вернуть" и после переименования (с очевидными ограничениями). В инструкции там есть.

В текстовом редакторе тоже можно. Иной раз действительно так проще (если что-то хитроумное нужно, то можно и макрокоманду написать).

P.S.
wrest в сообщении #1528370 писал(а):
без п ратства
Цитата:
Bulk Rename Utility
The Free File Renaming Utility for Windows.
Bulk Rename Utility: file renaming software for Windows. Bulk Rename Utility is free of charge for personal, private use, at home.
https://www.bulkrenameutility.co.uk/
А ссылка на old-dos -- на старую версию (попроще), которой нет уже на сайте (или не было тогда, не помню, не проверял сейчас).

 Профиль  
                  
 
 Re: Как поменять местами части имени многих файлов в Виндовс?
Сообщение09.08.2021, 14:33 
Аватара пользователя


13/02/18
1070
Україна, село
Dmitriy40, SergeCpp, wrest

К сожалению я не намного выше окрестности ноля в программировании, поэтому с переменными средами и так далее ниче не понял. Куча файлов в одной папке, неудобно названных реально достала, уже не только машина тормозит на них а и я пока что-то найду. Рассортировал файлы с помощью программы "Bulk Rename Utility", правда без "RegEx" команд и так далее, а просто через графический интерфейс в несколько этапов: сначала отделил файлы с двумя цыферками в строке где "seria" от файлов с одной цыферкой там, далее удалил префикс в имени, далее перенес переднюю часть имени в окончание, далее удалил оставшуюся черточку, а далее добавил вот тот префикс что удалял сначала опять в самое окончание. Заняло это все примерно два часа... И вуаля, магия! Не фанат программирования, но если получится надо будет подучить, упрощает управление компьютером однако, в смысле чтобы я делал если бы такой программы не оказалось существующей... Еще раз спасибо!

 Профиль  
                  
 
 Re: Как поменять местами части имени многих файлов в Виндовс?
Сообщение09.08.2021, 14:46 


05/09/16
11522
frostysh в сообщении #1528391 писал(а):
в смысле чтобы я делал если бы такой программы не оказалось существующей...

Руками бы делали, что ж еще. За два часа можно много файлов переименоввать руками в графическом интерфейсе проводника виндовз. Ну или как я написaл вам - сам список сгрузить в файл командой dir а дальше руками :)
Это очень стандартная задача, рутинная, так что программ много и представать себе, что "такой программы не оказалось существующей...", -- довольно трудно.

 Профиль  
                  
 
 Re: Как поменять местами части имени многих файлов в Виндовс?
Сообщение09.08.2021, 21:26 
Аватара пользователя


13/02/18
1070
Україна, село
wrest

Боюсь время затраченное на такое количество файлов в режиме "ручной обработки" (которые из себя представляют глупые азиатские мультики что я собирал много лет) было бы эквивалентно времени затраченого изучению этого, как его, синтаксиса команд в какой-то программе для переименования типа "Microsoft Power Shell", "Command Promt" на уровне достаточном для "потокового переименования" оных файлов, даже больше времени по идеи, и конечно же у вашего покорного слуги бы просто не хватило бы нервной системы на "ручное" переименование, а тут форум как всегда спас! Программа что я запустил для потокового ренейминга действительно хорошо исполняет свою роль!

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group