@choupa
Архитектор (обычный, который строит)

Как переименовать файлы по регулярному выражению?

Жизнь прожил, а так и не умею cmd/bat. Помогите.

Есть прорва файлов с названием вида
2456_32_название_файла.jpg
их надо пакетом переименовать в
2456-3.2 название файла.jpg

Надо сделать два реплейса:

1. /_/g на " " — заменить нижние подчёркивания на пробелы

2. /^(\d{4})\s(\d)(\d)\s(.*)$/ на "$1-$2.$3 $4" — записать версию через точку

Дело собственно не в регулярке (я их хорошо знаю, напишу что угодно), а как это сделать в bat-файле?
  • Вопрос задан
  • 614 просмотров
Пригласить эксперта
Ответы на вопрос 3
wisgest
@wisgest
Не ИТ-специалист
Задача решается целиком внутренними средствами командных файлов без использования внешних утилит. Регулярных выражений в них нет, но есть возможность получения подстроки, а также замены всех вхождений одной подстроки на другую, — читаете справку по команде SET.
Также есть возможность разбора строки на токены по заданному разделителю с помощью команды FOR с ключом /F.
Ответ написан
Комментировать
erge
@erge
Примус починяю
Если прям на Windows Batch Scripting:
CMD/BAT — Пакетное переименование файлов(.jpg) в разных папках (BAT)?
https://stackoverflow.com/questions/21162119/regul...

Если не принципиально, то использовать PowerShell:
www.outsidethebox.ms/17857

Либо поставить bash и как-то так:
https://stackoverflow.com/questions/11809666/renam...
в чистом bash, как-то так:
find . -type f -name "Friends*" -execdir bash -c 'mv "$1" "${1/\w+\s*-\s*(\d)x(\d+).*$/S0\1E\2.srt}"' _ {} \;

PS: пример выдернут из ссылки выше, не применительно к вашему случаю.
Ответ написан
Комментировать
shurshur
@shurshur
Сисадмин, просто сисадмин...
Самое простое - взять в CPAN вот этот perl-модуль. В составе есть готовый скрипт массового переименования по регулярному выражению.

Либо написать скрипт на любом другом знакомом языке (python, ruby итд), в котором есть поддержка регулярных выражений - задача не выглядит сильно сложной.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы