С сотнями строк CSV стоит заранее создать хеш-таблицу , которая отображает старые имена на новые имена.
Затем вам нужно только зациклить один раз над именами файлов, выполняя быстрый поиск по хеш-таблице в каждой итерации.
# Initialize the hashtable.
$ht = @{}
# Fill the hashtable, with the "name" column's values as the keys,
# and the "newname" columns as the values.
Import-Csv C:\TEST\Book1.csv |
ForEach-Object {
$ht.Add($_.name, $_.newname)
}
# Loop over the files and rename them based on the hashtable
Get-ChildItem C:\TEST\*.DOCX | Rename-Item -NewName {
$prefix = ($_.BaseName -split '_')[0] # Get prefix (before "_")
$newPrefix = $ht[$prefix] # Look up the prefix in the hashtable.
if ($newPrefix) { # Replace the prefix, if a match was found.
$newPrefix + $_.Name.Substring($prefix.Length)
}
else { # No replacement - output the original name, which is a no-op.
$_.Name
}
} -WhatIf
-WhatIf
предварительный просмотр операций переименования;удалите его для фактического переименования.