BatchRenameCreator.bat – CMD-скрипт (батник), с помощью которого самым удобным образом можно переименовать файлы в папке по обычному текстовому списку.
Этот скрипт делает всего одно единственное действие – генерирует BAT-файл с командами переименования файлов в выбранной папке. Отсюда и название BatchRenameCreator, что в переводе означает “Создатель BAT-файла для группового переименования”.

Есть много программ и скриптов для автоматического переименования файлов по маске, со счетчиками и даже с помощью регулярных выражений. Но иногда бывает нужно привести имена файлов к виду указанному в обычном тексте, например:
Именно для того, чтобы просто отредактировать имена файлов в папке в обычном блокноте, создан батник BatchRenameCreator.bat.
Работа с ним происходит по следующей простой схеме:
Этап 0 (необязательный). ПЕРЕД ЗАПУСКОМ батника желательно кое-что настроить. В частности
Предупреждение 2. Эта первая версия скрипта содержит алгоритм из двух циклов, один из которых вложен в другой. Считав одну строку в файле 1.txt скрипт считывает в среднем половину строк в файле 2.txt (пока не доберется до соответсвующей по номеру). Поэтому для большого количества имен время выполнения скрипта возрастает совсем не линейно. Так например если с 10 файлами затрачивается 0,2 секунды (обрабатывается 10*5=50 строк), то для 100 файлов это будет 20 секунд (100*50=5000 строк), не говоря уже о 1000 и более файлов. Т.е. тут надо пользоваться с осторожностью. Возможно в дальнейшем удасться применить другой подход к обработке списков и решить эту проблему – например создавать сотни переменных в которых хранить считанные строки. А пока для повседневных задач с парой сотен файлов такой производительности вполне хватает. Лично у меня 500 файлов обрабатываеются меньше чем за минуту. В крайнем случае, если файлов черезчур много и это вызывает проблемы, то можно просто разделить списки на 2 или больше частей (например по 200 или 500 строк), и производить их слияние поочередно.
Ссылка для закачки архива BatchRenameCreator.bat (в комплекте описание и тестовая папка с файлами)
Если нет возможности скачать архив, то ниже приведен полный текст BAT-файла с подробными комментариями. Для тех кто не знает что с ним делать, подсказка – скопируйте весь этот текст в блокнот (в кодировке Windows CP-1251) и сохраните с названием BatchRenameCreator.bat , brc.bat или с любым удобным именем:

Этот скрипт делает всего одно единственное действие – генерирует BAT-файл с командами переименования файлов в выбранной папке. Отсюда и название BatchRenameCreator, что в переводе означает “Создатель BAT-файла для группового переименования”.

Есть много программ и скриптов для автоматического переименования файлов по маске, со счетчиками и даже с помощью регулярных выражений. Но иногда бывает нужно привести имена файлов к виду указанному в обычном тексте, например:
- названия песен из музыкального альбома
- названия серий из двухстосерийного цикла телепередач
- переведенные на другой язык имена файлов
Именно для того, чтобы просто отредактировать имена файлов в папке в обычном блокноте, создан батник BatchRenameCreator.bat.
Работа с ним происходит по следующей простой схеме:
Этап 0 (необязательный). ПЕРЕД ЗАПУСКОМ батника желательно кое-что настроить. В частности
- Указать путь к программе WinMerge (в строке начинающейся с команды set WINMERGE). Саму программу можно взять по адресу winmerge.org/downloads/ Если нет желания или возможности, то вместо WinMerge можно пользоваться любым текстовым редактором типа блокнот. Просто будет не так удобно сопоставлять старые и новые имена файлов.
- Если нужно в процессе переименования к файлам добавить нумерацию, то нужно в строке “set CDIG=0″ вместо нуля поставить цифру 1, 2 или 3 – количество цифр счетчика. Т.е. если переименовывается не более 99 файлов то достаточно двух цифр. Если от 100 до 999, то нужно 3 цифры. С большим количеством файлом скрипт не проверялся, да и в таких случаях смысла особого нет работать в полуручном режиме редактирования длиннющих списков. Стоит отметить что нумерация особенно необходима, если нужно сохранить порядок файлов в папке, а алфавитная сортировка новых имен приводит к потере этого порядка. Например если взяли из интернета ненумерованный список названий серий для сериала, то достаточно использовать его как есть, применив автоматическую нумерацию, вместо того чтобы вручную прописывать десятки или сотни цифр в начале названия каждой серии.
Вот результат применения двухзнаковой нумерации:
- Если уже имеется заготовленный список имен файлов которые надо переименовать, то его надо сохранить в файл 1.txt (в формате одна строка – одно имя файла). Если имеется заготовленный список новых имен файлов, то его надо сохранить в файл 2.txt.
- Этап 1. Для начала нужно поместить bat-файл в нужную папку (в которой находятся необходимые для переименования файлы) и запустить на выполнение. При этом можно в качестве аргумента задать маску имен файлов, например так: BatchRenameCreator *.mp3
Эта маска будет использована в случае если не будет найден файл 1.txt – тогда он будет создан для всех файлов текущего каталога, удовлетворящих указанной маске. После этого если не будет найден файл 2.txt, то он будет создан как копия 1.txt. - Этап 2. Появляется окно WinMerge, в котором открыты оба файла для сравнения и редактирования. Пока списки разделены, можно легко их сдвинуть или подредактировать для полного соотвествия друг другу (в случае их несовпадения или пересортицы). Если программа WinMerge отсутствует, то следует отредактировать файлы, открыв их в блокноте, и после этого снова запустить батник на выполнение.
В процессе работы батника выводятся подсказки на английском языке из-за использования нестандартной для DOS-окна кодировки.При желании в тексте батника их можно поменять на русские, но тогда надо будет сохранить файл в кодировке OEM-866, что не получится в стандартном блокноте. Без смены кодировки на экране будут кракозябры вместо русских букв.
- Этап 3. Как только WinMerge будет закрыта (или если ее не удалось запустить), произойдет слияние обоих списков в файл rn.bat (с добавлением нумерации, если она указана). Также в файл descript.ion будет добавлены строки соостветсвия новых и старых имен, что может быть крайне необходимо если вдруг понадобится восстанавливать старые имена файлов (ведь никто не застрахован от ошибки). Вот так будет выглядеть просмотр описаний файлов после переименования:
Этот третий этап происходит автоматически без участия пользователя. - Этап 4. Созданный файл rn.nat открывается в блокноте, где можно его окончательно доредактировать и сохранить. Теперь все готово для главной операции – собственно переименования. Остается только запустить файл rn.bat на выполнение и любоваться переименованными файлами.
- Этап 5. Если в список с новыми именами файлов не содержал расширений для файлов, то можно воспользоваться любым удобным файл-менеджером, чтобы массово переименовать файлы добавив к ним нужное окончание. Также по завершению всех операций стоит очистить файл descript.ion от добавленных строк (либо просто удалить, если он не нужен), поскольку при каждом запуске скрипта он неумолимо разрастается.
Предупреждение 2. Эта первая версия скрипта содержит алгоритм из двух циклов, один из которых вложен в другой. Считав одну строку в файле 1.txt скрипт считывает в среднем половину строк в файле 2.txt (пока не доберется до соответсвующей по номеру). Поэтому для большого количества имен время выполнения скрипта возрастает совсем не линейно. Так например если с 10 файлами затрачивается 0,2 секунды (обрабатывается 10*5=50 строк), то для 100 файлов это будет 20 секунд (100*50=5000 строк), не говоря уже о 1000 и более файлов. Т.е. тут надо пользоваться с осторожностью. Возможно в дальнейшем удасться применить другой подход к обработке списков и решить эту проблему – например создавать сотни переменных в которых хранить считанные строки. А пока для повседневных задач с парой сотен файлов такой производительности вполне хватает. Лично у меня 500 файлов обрабатываеются меньше чем за минуту. В крайнем случае, если файлов черезчур много и это вызывает проблемы, то можно просто разделить списки на 2 или больше частей (например по 200 или 500 строк), и производить их слияние поочередно.

Если нет возможности скачать архив, то ниже приведен полный текст BAT-файла с подробными комментариями. Для тех кто не знает что с ним делать, подсказка – скопируйте весь этот текст в блокнот (в кодировке Windows CP-1251) и сохраните с названием BatchRenameCreator.bat , brc.bat или с любым удобным именем:
@echo offrem Этот bat-файл создает "rn.bat" для группового переименования файлов.
rem Имена файлов берутся из списков (текстовых файлов "1.txt" и "2.txt")
rem Если этих файлов нет, то они создаются автоматически для всех файлов текущей папки,
rem либо для маски, переданной через первый параметр командной строки (напр. *.mp3).
rem В итоге в файле rn.txt получаем список команд: ren "Строка из списка 1" "Строка из списка 2"
rem Паралельно в файл descript.ion для каждого нового имени записывается соответсвенное старое имя,
rem Это может пригодиться, если понадобится узнать старое имя файла.
rem ________________________________________________________________
rem В этой переменной задайте количество цифр счетчика (от 0 до 3), добавляемого в начале имени файлов set CDIG=0
rem В следующей комманде желательно прописать путь к программе WinMerge -
rem она весьма удобна для синхронного редактирования обоих списков до их слияния.set WINMERGE="d:\Soft\Office\WinMergePortable\WinMergePortable.exe"
rem Задаем кодировку Windows-1251 и создаем пустой файл "rn.bat"chcp 1251 > nul
echo chcp 1251 > rn.bat
rem Если списков не имеется, то в первый список сохраняем список файлов по маске
rem из первого аргумента командной строки. Второй список генерируется как копия первого.if not exist 1.txt ( dir %1 /B > 1.txt )if not exist 2.txt ( copy 1.txt 2.txt )
rem Если порядок имен в первом и втором списках не совпадают, то самое время подправить спискиecho Please, edit files 1.txt and 2.txtif exist %WINMERGE% (%WINMERGE% 1.txt 2.txt) else pause
rem Числовая переменная n - номер считываемой из первого списка строкиset /a n=0
rem Следующая команда необходима для изменения переменной n внутри цикла.
rem Для этого переменная должна обрамляться знаками !! (вместо %%).setlocal enabledelayedexpansion
rem Цикл построчного считывания первого спискаfor /f "tokens=*" %%j in (1.txt) do (
rem Записываем старое имя в файл rn.bat rem Следующая команда - то же что и echo "...", но без переноса строки <Nul Set /P $V="ren "%%j" ">> rn.bat
rem Ищем строку номер n во втором списке и добавляем в ее начало счетчик с кол-вом цифр CDIG call :poisk2 !n!
rem Записываем старое имя в файл descript.ion echo "%%j" >> descript.ion
set /a n=!n!+1
cls
echo Processed: !n!
)
chcp 866 > nul
echo chcp 866 >> rn.batecho pause >> rn.batrem Итоговый файл готов. Можно его доредактировать в блокноте и запустить на выполнениеnotepad rn.batecho Please, run "rn.bat" to rename filespause
goto :eof
rem Вызов по метке poisk2 равносилен вызову отдельного файла poisk2.bat след.содержания::poisk2SetLocal EnableExtensionsrem Начинаем считывать второй список со строки номер n (передан аргументом %1), for /f "tokens=*" %%i in ('more +%1 "2.txt"') do (
set /a m=%1+1
rem Добавляем нули впереди счетчика, чтоб получить кол-во цифр CDIG Set Y=
if /I %CDIG% GEQ 3 if /I !m! LSS 100 Set Y=0
if /I %CDIG% GEQ 2 if /I !m! LSS 10 Set Y=0!Y!
if /I %CDIG% GEQ 1 Set Y=!Y!!m!.
rem Записываем новое имя в файл rn.bat (и для бэкапа в файл descript.ion) echo "!Y!%%i" >> rn.bat
<Nul Set /P $T=""!Y!%%i" ">> descript.ion
rem Считав одну строку из второго списка возвращаемся в место вызова call exit /b)
Комментарии
Отправить комментарий