Добро пожаловать, Роберт!С вашим скриптом происходит несколько вещей:
- Существует опечатка:
$ChildPat
- Вам не нужен объект FileInfo для создания нового каталога, и вы можете 'создать один из несуществующего пути.
$Destination = Join-Path $_.Directory $_.BaseName
получит имя новой папки более надежно, в необычном случае, когда в имени файла есть встроенный файл '.pdf' - . Он не получает последнюю версию PDF.
Предполагая, что вы хотите получать только папки с PDF, у вас должен быть вложенный Get-ChildItem для каждой папки, как рекомендует @Lee_Dailey:
Push-Location $SourceFolder
Foreach ($dir in (Get-ChildItem *.pdf -Recurse | Group-Object Directory | Select Name )){
Push-Location $dir.Name
$NewestPDF = Get-ChildItem *.pdf | Sort-Object ModifiedDate | Select -Last 1
$Destination = Join-Path $dir.Name "..\$($NewestPDF.BaseName)"
If(!(Test-Path $Destination)){New-Item $Destination -ItemType Directory}
Copy-Item *.PDF $Destination
Pop-Location
#Remove-Item $dir.Name #uncomment to remove the old folder (is it empty?)
}