1

Тема: RegEx: Помогите пожалуйста с регулярным выражением для переименования.

Подскажите пожалуйста, какое регулярное выражение нужно использовать для переименования файлов в таком формате: (ШаблонРегулярногоВыражения > ВыражениеЗаменитьНа)?

Исходные файлы выглядят так и пронумерованы от 00001 и т.д., но некоторых номеров не хватает, т.е. неполная хронология:

00001-Название1.расширение
00002-Название2.расширение
00245-Название3.расширение
00573-Название4.расширение

Нужно их пронумеровать по новой, т.е. править только первые 5 знаков, и чтобы нумерование начиналось с заданного числа, т.е., например, с 00123:

00123-Название1.расширение
00124-Название2.расширение
00125-Название3.расширение
00126-Название4.расширение

2 (изменено: Rumata, 2015-03-18 13:49:06)

Re: RegEx: Помогите пожалуйста с регулярным выражением для переименования.

Вариантов регулярного выражения несколько.
/(\d+)/
/(\d{5})/

Реализация зависит от языка программирования - js, vbs, perl, другие языки имеют свои средства для решения похожей задачи. Например:

Perl


perl -pe 'BEGIN { $start = 123; } s/(\d+)/sprintf "%05d", $start++/e' z.txt

JavScript


var start = 123;

while ( ! WScript.StdIn.AtEndOfStream ) {
    var line = WScript.StdIn.ReadLine().replace(/\d+/, function() {
        return ( '00000' + ( start++ ) ).slice(-5);
    });
    WScript.StdOut.WriteLine(line);
}
( 2 * b ) || ! ( 2 * b )

3

Re: RegEx: Помогите пожалуйста с регулярным выражением для переименования.

Rumata
О, я думал есть единый синтаксис. А вообще это нужно для переименования в XYplorer, думал это просто, значит это невозможно просто подставив два выражения?

4

Re: RegEx: Помогите пожалуйста с регулярным выражением для переименования.

Так это Вам надо документацию по XYplorer читать. У него свой синтаксис для скриптинга.

( 2 * b ) || ! ( 2 * b )

5

Re: RegEx: Помогите пожалуйста с регулярным выражением для переименования.

Rumata
Да, тоже думал там есть, но вот всё, что говорится по поводу RegEx. Там есть способ нумерации <#01>, но он не заменяет первые 5 знаков, а добавляет.

Регулярным выражением...

Позволяет переименовать выделенные имена файлов, с использованием регулярных выражений. Формат:

   ШаблонРегулярногоВыражения > ВыражениеЗаменитьНа

Следите за пробелами вокруг сепаратора "больше" ( > ).

Операция по умолчанию не чувствительна к регистру (a=A). Чтобы искать с учётом регистра добавьте обратный слэш в конец ВыражениеЗаменитьНа:

Примеры:

   .html$ > .htm    = поменять расширения с .html на .htm

   .html$ > .htm\   = поменять расширения с .html (с уч. регистра, т.е. не .HTML) на .htm

Примечание:     Переименование включает в себя файл-расширения.

6

Re: RegEx: Помогите пожалуйста с регулярным выражением для переименования.

Esc, учитывая, что очерёдность переименования в командной строке будет соответствовать алфавитному порядку (а имена Ваших переименуемых файлов это допускают), то можно обойтись одной строкой без  XYplorer и без регулярных выражений:

cd/d  "Папка с обрабатываемыми файлами"& cmd/v/c "set n=100000& for /f "delims=" %i in ('dir/a-d/b') do @>nul set/a n+=1& ren "%i" "!n:~1!%~xi""

.
В папке не должно быть других файлов.

7

Re: RegEx: Помогите пожалуйста с регулярным выражением для переименования.

Yury
Но ведь этот скрипт переименовывает файлы в 00001, 00002, 00003, а не заменяет первые 5 знаков, при этом сохраняя остальное имя? И еще, как в нём начинать нумерование с любой цифры, например с 00047, а не с 00001?

8 (изменено: Flasher, 2015-03-20 17:27:09)

Re: RegEx: Помогите пожалуйста с регулярным выражением для переименования.

Esc
Ох уж этот XYPlorer с его синтаксисом... Используйте лучше ИГП в ТС с маской [C123:5][N6-] без всяких регулярок.

9

Re: RegEx: Помогите пожалуйста с регулярным выражением для переименования.

Flasher
Да, похоже без ТС не обойтись, думал легко прикрутить эту операцию к XY.

10

Re: RegEx: Помогите пожалуйста с регулярным выражением для переименования.

Esc пишет:

Но ведь этот скрипт переименовывает файлы в 00001, 00002, 00003, а не заменяет первые 5 знаков, при этом сохраняя остальное имя? И еще, как в нём начинать нумерование с любой цифры, например с 00047, а не с 00001?


Я привёл всего лишь пример, а "допиливать" его под свои нужды можно как угодно:

cd/d  "Папка с обрабатываемыми файлами"& cmd/v/c "set n=100047& for /f "delims=" %i in ('dir/a-d/b') do @set f=%i& ren "%i" "!n:~1!!f:~5!"&>nul set/a n+=1"

.