dimayakovlev.ru


Массовое переименование файлов в PowerShell

Пакетное переименование большого количества файлов это одна из распространённых операций при работе с объектами файловой системы, имеющая цель упорядочивания системы хранения данных.

Большинство опытных пользователей привыкли решать её с использованием различных файловых менеджеров, начиная с Norton Commander и заканчивая современными Total Commander, Far Manager, FreeCommander и других. Если вы, как и я, не используете подобные файловые менеджеры, это не значит, что придётся каждый раз заниматься переименованием файлов вручную, потому что массовое переименование файлов - это одна из типичных задач, решаемых с помощью PowerShell.

Прежде всего следует ознакомиться с двумя командлетами PowerShell:

  • Get-ChildItem - возвращает элементы и дочерние элементы заданного места;
  • Rename-Item - выполняет переименование элемента.

По приведённым ссылкам дано подробное описание каждого командлета с примерами их практического использования. При этом особое внимание следует уделить параметрам, так как именно они делают использование командлетов гибким, позволяя задать фильтры и правила переименования файлов.

В качестве примера использования PowerShell для массового переименования файлов, может быть рассмотрена задача изменения шаблонов оформления для страниц веб-сайта, работающего под управлением Grav CMS. Эта система управления контентом использует имя Markdown файла страницы для назначения ей шаблона оформления. Так, при желании изменить шаблоны оформления для страниц, использующих шаблоны note-default.html.twig, note-extra.html.twig, note-super.html.twig на шаблон note-normal.html.twig, требуется провести массовое переименование файлов страниц note-default.md, note-extra.md, note-super.md в note-normal.md. При этом Markdown файлы страниц расположены в поддиректориях директории /user/pages/notes/.

Для выполнения описанной задачи необходимо:

  1. получить все файлы по маске note-*.md, находящиеся в поддиректориях директории /user/pages/notes/;
  2. переименовать все полученные файлы, используя новое имя note-normal.md.

Перечисленные действия выполняет следующий код:

Get-ChildItem -Path \user\pages\notes\ -Filter note-*.md -Recurse | Rename-Item -NewName note-normal.md

С целью усложнения задачи можно рассмотреть вариант переименования файлов, заменяя только часть исходного имени. Например, переименовать файлы из уже рассмотренного примера следующим образом: note-default.md, note-extra.md, note-super.md в item-normal.md, item-extra.md и item-super.md. Для этого требуется изменить значение параметра -NewName командлета Rename-Item:

Get-ChildItem -Path \user\pages\notes\ -Filter note-*.md -Recurse | Rename-Item -NewName {$_.Name -Replace "note","item" }

Разобравшись со всеми параметрами используемых командлетов, приведённые примеры кода можно легко адаптировать для выполнения задач массового переименования файлов и директорий, в соответствие с возникающими потребностями, не прибегая к использованию дополнительного программного обеспечения.