Я не думаю, что вы можете использовать $ _ таким образом. Я думаю, вам нужно обернуть его в ForEach l oop, чтобы ссылки работали таким образом. Как только это будет сделано, вам нужно будет указать путь к файлу, который вы хотите переименовать:
Что-то вроде:
Get-ChildItem -Recurse -Include *.pdf -File |
ForEach-Object{
Rename-Item -Path $_.FullName -NewName ( $_.BaseName.SubString(0, 31) + $_.Extension )
}
Обратите внимание, что я использовал круглые скобки вместо фигурных скобок. Если вы используете блок сценария, он может не оцениваться. Есть и другие способы сделать это, но я думаю, что использование скобок является наиболее очевидным.
Обратите внимание, я использовал $_.BaseName
вместо name. Базовое имя не включает расширение. хотя я не знаю, как работает ваша подстрока, я оставил это на ваше усмотрение.
Вы можете объединить это с @ ответом Матиаса или его модификацией. Это может дать вам лучший или более надежный способ получить новое имя файла. Я не тестировал, но может выглядеть примерно так:
Get-ChildItem -Recurse -Include *.pdf -File |
ForEach-Object{
Rename-Item -Path $_.FullName -NewName ( ($_.Name -replace '(?<=^.{35}).*$') + $_.Extension )
}