$Pro
в операторе переименования распространяется только на имя файла ($Pro.Name
), а не на полный путь ($Pro.FullName
), поэтому оператор не находит файл в текущем рабочем каталоге.Кроме того, Contains()
необходимо вызывать для свойства файловых объектов (например, $_.Name.Contains('-A1')
), а не для непосредственных объектов.
Вы можете решить проблему, изменив
Rename-Item $Pro -NewName ($Pro.BaseName).ini
to
Rename-Item $Pro.FullName -NewName ($Pro.BaseName).ini
Однако, ваш код подразумевает, что Get-ChildItem
вернет только один результат.Он сломается, когда оператор вернет более одного элемента, потому что Rename-Item
принимает только один исходный путь.
Лучшим подходом к решению проблемы является подача результатов Get-ChildItem
непосредственно в Rename-Item
черезpipe:
Get-ChildItem -Path 'C:\Users\SS\Work' -Filter '*-A1*' |
Rename-Item -NewName { $_.BaseName + '.ini' }
Это решает проблему пути, а также несколько результатов.