Переименование файла, путём изменения его расширения, это одна из часто встречаемых задач при автоматизации. Предлагаю рассмотреть три варианта изменения расширения файлов в скриптах PowerShell.
Если у вас нет набора файлов, над которыми можно произвести эксперименты с переименованием и проверить работоспособность каждого из рассматриваемых способов, файлы можно создать при помощи следующего кода PowerShell.
(1..10) | foreach { New-Item -Path "$_.txt" -Type File }
В результате выполнения кода, в текущей директории будут созданы десять файлов с расширением .txt. Над этим набором файлов можно проводить дальнешие эксперименты с переименованием, меняя их расширения каждым из рассматриваемых далее способов.
Изменение расширения файлов с использованием оператора замены
В результате выполнения следующего кода, расширение файлов будет изменено с .txt на .html. Изменение расширения производится при помощи оператора -replace
, заменяющего строки, соответствующие шаблону регулярного выражения.
$files = Get-ChildItem -Path . -Filter *.txt
$files | Rename-Item -NewName { $_.Name -replace '\.txt', '.html' }
Изменение расширения файлов с использованием свойства BaseName
В результате выполнение следующего кода, расширение файлов будет изменено с .html на .php. Изменение расширения производится путём прибавления нового расширения файла к имене файла без расширения, возвращаемого свойством BaseName
.
$files = Get-ChildItem -Path . -Filter *.html
$files | Rename-Item -NewName { $_.BaseName + ".php" }
Свойство BaseName
было добавлено в PowerShell v2. Альтернативой использованию свойства BaseName
является вызов метода .NET [System.IO.Path]::GetFileNameWithoutExtension()
.
$files = Get-ChildItem -Path . -Filter *.html
$files | Rename-Item -NewName { [IO.Path]::GetFileNameWithoutExtension($_.FullName) + ".php" }
Изменение расширения файлов с использованием метода [System.IO.Path]::ChangeExtension()
В результате выполнение следующего кода, расширение файлов будет изменено с .php на .txt. Изменение расширения производится путём вызова метода [IO.Path]::ChangeExtension()
, который является частью .NET. Прочитать о методе [IO.Path]::ChangeExtension()
можно в официальной справке Microsoft.
$files = Get-ChildItem -Path . -Filter *.php
$files | Rename-Item -NewName { [IO.Path]::ChangeExtension($_.Name, ".txt") }
В каждом из примеров для переименования файлов используется командлет Rename-Item
. Узнать подробнее об использовании командлета можно в официальной справке PowerShell.