Попробуйте это:
Get-ChildItem directory `
| Rename-Item -NewName { $_.Name -replace '^filename_+','' -replace '_+',' ' }
Обратите внимание, что я просто перенаправляю объекты на Rename-Item
, на самом деле не нужно делать это через Foreach-Object
(псевдоним %
).
Обновление
У меня нет ничего задокументированного о «магии» со скриптовыми блоками. Если я правильно помню, его можно использовать, если свойство ValueFromPipelineByPropertyName=$true
:
function x{
param(
[Parameter(ValueFromPipeline=$true)]$o,
[Parameter(ValueFromPipelineByPropertyName=$true)][string]$prefix)
process {
write-host $prefix $o
}
}
gci d:\ | select -fir 10 | x -prefix { $_.LastWriteTime }