Как подготовить пакетное переименование файлов без сюрпризов
Соберите список старых и новых имён, проверьте совпадения и испытайте преобразование на отдельной папке.
Из сканера вышла папка с файлами scan 01.pdf, scan 02.pdf и scan 03.pdf. Хочется дать им имена по теме занятия и номеру. Когда файлов мало, это просто. При десятках имён появляется риск перепутать порядок, дать двум файлам одинаковое имя или случайно затронуть соседние материалы. Помогает разделить решение на два шага. Сначала составить таблицу «старое имя → новое имя», затем выполнить только проверенное преобразование.
Ниже пример для PowerShell. Мы ограничиваемся отдельной тестовой папкой и сначала выводим план. Для исходных данных сохраняем файлы и порядок, поэтому не включаем команды принудительной замены. Если ваши исходники сортируются по дате съёмки или содержат ссылки друг на друга, понадобится дополнить правила проверки.
Сначала определите, что означают новые имена
Представьте три скана занятия по астрономии. Первый — обложка, второй — схема, третий — лист наблюдений. Разумный шаблон astro-2026-11-06-01.pdf сохраняет дату занятия и положение файла. Не используйте дату изменения как дату занятия без проверки. Файл мог быть скопирован позже. Отдельный лист с соответствием номеров помогает узнать, какие материалы вы ожидали.
Скопируйте три тестовых файла в новую папку rename-demo. Если исходник нужен для проекта, используйте безопасный учебный набор. Не начинайте массовое действие из каталога загрузок, где рядом лежат чужие документы. Уточните точный путь к папке. В PowerShell команды будут работать именно там, без просмотра подпапок. Названия для примера начинаются со слова scan и содержат ровно двузначный номер.
Получите список преобразований
Команды ниже читают каталог и показывают план. Подставьте фактический путь к тестовой папке. Сопоставление оставляет другие имена за пределами плана.
$folder = 'C:\Users\Reader\Documents\rename-demo'
$plan = Get-ChildItem -LiteralPath $folder -File | ForEach-Object {
if ($_.Name -match '^scan (\d{2})\.pdf$') {
[pscustomobject]@{
OldName = $_.Name
NewName = "astro-2026-11-06-$($Matches[1]).pdf"
}
}
}
$plan | Format-Table -AutoSize
Проверьте, что в плане три строки и что одна строка соответствует одному файлу. Если план пуст, не расширяйте маску автоматически. Сначала сравните написание имён. Например, сканер мог поставить дефис вместо пробела. Если в папке есть scan 100.pdf, он тоже не попадёт в этот план. Это ожидаемое ограничение примера. Для вашей задачи измените правило осознанно и повторите просмотр.
Сравните цель каждой строки. Убедитесь, что все новые имена уникальны и что в папке ещё нет файлов с такими именами. Если обнаружили занятое имя, выберите другое или выясните, кому принадлежит существующий файл. Не применяйте принудительную замену. Отдельно проверьте расширения. Переименование файла из PDF в PNG не меняет его содержимое и не заменяет преобразование формата.
Проверьте пробную команду
Для одной выбранной строки можно запустить команду с -WhatIf. Она показывает предполагаемое действие без самого переименования. Сохраняйте кавычки вокруг полных путей и используйте простое имя без каталога в -NewName.
Rename-Item -LiteralPath 'C:\Users\Reader\Documents\rename-demo\scan 01.pdf' -NewName 'astro-2026-11-06-01.pdf' -WhatIf
Сверьте напечатанный путь и целевое имя с таблицей. После пробного запуска выполните проверку файлового менеджера. Оба состояния должны быть понятны. Старый файл ещё существует, а новый не появился. Предпросмотр не доказывает успешность всей операции. Возможны занятые файлы, отличия в правах доступа и изменения в папке между просмотром и действием.
Для первого применения в учебной папке переименуйте только один файл через проводник или той же командой без -WhatIf, когда точно знаете, какой путь меняете. Затем откройте его. Сравните страницу и номер с ожидаемым. Если команда не сработала, устраните конкретную причину и снова сделайте предварительный просмотр. Не повторяйте вслепую на всём наборе.
Подготовьте применение и обратный путь
Сохраните таблицу сопоставлений до переименования реальных материалов. Она позволит понять, каким было прежнее имя, и обновить ссылки из заметок. Для папок, где названия включены в Markdown, таблицы или другие документы, заранее найдите два контрольных использования. Переименование файла обычно не меняет ссылки в соседних документах автоматически. Если приложение умеет обновлять ссылки, проверьте именно его механизм.
После применения посчитайте файлы, сопоставьте новые имена с планом и откройте несколько контрольных материалов. Для важного набора можно вычислить контрольную сумму одного файла до и после действия. Изменится путь, а байты должны остаться прежними. Упражнение готово, когда пробная команда ничего не изменила, первая реальная строка совпала с планом, а затронутые ссылки проверены.
Отдельно подумайте об именах, которые отличаются только регистром букв. Один файловый менеджер может показывать их как разные, а на целевом диске для них окажется одно место. Если набор предстоит переносить, проверьте будущие имена с учётом регистра и ограничений той системы, где он будет храниться. Для учебной таблицы достаточно посмотреть, нет ли двух целей, которые совпадут после перевода букв в один регистр.
Запишите также порядок, в котором стоит применять строки. Если имя одного источника уже используется как цель для другого, простое последовательное переименование даст конфликт. В этой статье исходные и целевые имена начинаются с разных слов. Если у вас получилась цепочка пересекающихся имён, выделите её в отдельный тест с временными уникальными именами. Не добавляйте её к общему запуску до проверки.