Стоит отметить, что вы можете направить вывод из Get-ChildItem непосредственно в Rename-Item, вам не нужен foreach. Кроме того, и это умная часть, значение параметра -NewName может быть блоком сценария, который выдает новое имя. Этот блок сценария может использовать $ _ для обращения к объекту файла, который в данный момент обрабатывается.
Так что вы можете сделать что-то вроде этого:
dir -Recurse -Include filename.pdf | ren -NewName { "$($_.Directory.Name).pdf" }
(я думаю, что именно Кит Хилл заставил меня осознать этот трюк.)