Простая служебная функция
<#
# Renames all files under the given path (recursively) whose extension matches $OldExtension.
# Changes the extension to $NewExtension
#>
function ChangeFileExtensions([string] $Path, [string] $OldExtension, [string] $NewExtension) {
Get-ChildItem -Path $Path -Filter "*.$OldExtension" -Recurse | ForEach-Object {
$Destination = Join-Path -Path $_.Directory.FullName -ChildPath $_.Name.Replace($OldExtension, $NewExtension)
Move-Item -Path $_.FullName -Destination $Destination -Force
}
}
Использование
ChangeFileExtensions -Path "c:\myfolder\mysubfolder" -OldExtension "extension" -NewExtension "otherextension"
Но он может сделать больше, чем просто это. Если у вас были следующие файлы в той же папке, что и ваш скрипт
example.sample.csv
example.txt
mysubfolder/
myfile.sample.csv
myfile.txt
этот сценарий переименует все файлы .sample.csv в файлы .txt в данной папке и во всех подпапках и перезапишет любые существующие файлы с этими именами.
# Replaces all .sample.csv files with .txt extensions in c:\myfolder and in c:\myfolder\mysubfolder
ChangeFileExtensions -Path "c:\myfolder" -OldExtension "sample.csv" -NewExtension "txt"
Если вы не хотите, чтобы он был рекурсивным (влияющим на подпапки), просто измените
"*.$OldExtension" -Recurse | ForEach-Object
до
"*.$OldExtension" | ForEach-Object