Как переименовать все файлы в текущем каталоге
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее... |
Задача E-02
Понадобилось мне тут переименовать довольно много файлов. Вручную это делать было лень. Да и долго. Поэтому решил написать для этого особую программку.
А теперь подробнее:
- Есть папка с файлами. Все файлы имеют одинаковый тип (в моём случае это MP3). Имена всех файлов содержат русские буквы. Надо переименовать их таким образом, чтобы в именах не было русских букв.
Я решил реализовать две функции:
- Переименование с заменой русских букв латинскими. Например, а-a, б-b, в-v и так далее.
- Переименование с заменой русских букв цифрами. Точнее, русские буквы не заменяются цифрами, а просто имя файла заменяется номером. Например, 001, 002, 003 и т.д.
Скажу сразу, что задача эта не такая простая, особенно для новичков. Потому что все современные средства разработки используют кодировку Unicode, а при работе со строками и символами в этой кодировке есть свои особенности.
Поэтому я решил не только показать, но и предоставить для скачивания исходные коды (ссылка в конце статьи).
Для нетерпеливых сразу видео:
А для дотошных ещё немного текста…
Для упрощения я не стал заменять одну русскую букву на две латинских. Например, “я” на “ya”. Поэтому каждой русской букве у меня соответствует какой-то один символ - латинская буква или спецсимвол типа подчёркивания (_).
Вот объявленные константы для поиска и замены символов:
const RusStr = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя'; EngStr = 'ABVGDEEJZIIKLMNOPRSTUFHCCSS_Y-EUAabvgdeejziiklmnoprstufhccss_y-eua';
Для поиска файлов я использовал функцию FindAllFiles
, о которой здесь рассказывать не буду.
Если кратко, то она создаёт список типа TStringList
и загружает в него файлы указанного типа, найденные в указанном каталоге.
То есть поиск файлов выполняется достаточно просто. А вот обработка найденных значений у новичков может вызвать панику. Потому что см. выше.
Вот исходный код основной функции:
//******************************************************************* // Переименовывает файл // ВХОД: Старое имя файла // ВЫХОД: TRUE - файл был переименован //******************************************************************* function CreateNewName(OldName : string) : boolean; var i, j : WORD; ch : string; st : string; begin Result := FALSE; if OldName = 'FilesRename.exe' then Exit; st := ''; for i := 1 to UTF8Length(OldName) do begin ch := UTF8Copy(OldName, i, 1); j := UTF8Pos(ch, RusStr); if j = 0 then st := st + ch else begin st := st + UTF8Copy(EngStr, j, 1); Result := TRUE; end; end; if Result then begin RenameFile(OldName, st); WriteLn('Rename : ', OldName, ' >>> ', st); end; end;
Комментировать не буду, а то это будет слишком просто. Обратите внимание на использование функций, предназначенных для работы с UTF8.
Ну и ещё одна особенность - если не указать расширение файла, отличное от ЕХЕ, то функция
FindAllFiles
найдёт и включит в список в том числе и файл программы (в моём случае это
FilesRename.exe
). Поэтому сначала я проверяю имя файла, и если оно совпадает с именем файла программы, то выхожу их функции. Иначе программа переименует саму себя.
Ну что же, на этом всё. Подробности см. в видео и в исходных кодах:
Вступить в группу "Основы программирования"
Подписаться на канал в РУТУБ Подписаться на Дзен-канал Подписаться на рассылки по программированию |
Как стать программистом 2.0
Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее... |
Помощь в технических вопросах
Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее... |