If the CSV file contains both the current names and the new names, this should work if you use the first line for column labels (I'm using OldName and NewName in this example):
Import-CSV $pathToCSV | ForEach-Object { Rename-Item $_.OldName $_.NewName }
If you just have a list of new names as a text file where the first line of the file is the new name for the first file (by name, sorted alphabetically), this should work:
$files = Get-ChildItem -File *.pdf | Sort-Object -Property Name #I think the output of Get-ChildItem is already sorted by name, but I'm not sure
$newNames = Get-Content $pathToTXT
if ($files.Count -ne $newNames.Count) {
Write-Error "The number of PDF files to be renamed does not match the number of new names"
exit
}
0..($files.Count - 1) | ForEach-Object { Rename-Item $files[$_] $newNames[$_] }