Ваш собственный ответ эффективен, но неудобен в двух отношениях:
Смешивает расширяемые строки (интерполяция строк внутри "..."
) с форматированием строк на основе шаблона с помощью оператора -f
.
Используется %
(ForEach-Object
) для запуска Rename-Item
для каждого входного объекта, что весьма неэффективно.
Вот решение, которое обеспечивает исправление путем последовательного использования -f
и использования блока сценария с задержкой привязки :
$Artist = " Name"
$Type = "Type"
$Location = "Loc"
$Month = "Month"
$Year = "2019"
$Album = "$Artist $Type $Location $Month $Year"
$i = 1
Get-ChildItem *.mxf |
Rename-Item -NewName { '{0:D2} {1}.mxf' -f ([ref] $i).Value++, $Album }
Обратите внимание на использование ([ref] $i).Value++
для увеличения значения $i
, что необходимо, поскольку блок сценария с задержкой привязки, переданный в -NewName
, выполняется в дочерней области - см. этот ответ для деталей.
Обратите внимание, что $script:i++
- прагматичная альтернатива, но менее гибкая, чем решение выше - см. Связанный ответ.