使用 Powershell 从 CSV 重命名多个部分文件

Multiple partial file renames from CSV with Powershell

我有一个源图像文件夹 (.jpg),我想根据 .csv 中的数据重命名它。

重命名将在文件名的两个部分上进行,文件名类似于part1.part2.jpg

这是 .csv 的样子:

我有一个部分工作的脚本,但它抛出错误,指出它找不到原始文件,并且总是无法正确重命名 .csv 中找到的最后一个文件。

#read the csv doc provided to get the old Part1s
$csvData = Import-Csv '.\*.csv'

#get the source images
$sourceImages = GCI '.\Source_Images' -Recurse

#rename source file
$csvData | % {
$oldPart1 = $_.OldPart1
$newPart1 = $_.NewPart1
$oldPart2 = $_.OldPart2
$newPart2 = $_.NewPart2
    foreach($sourceImage in $sourceImages){
        $sourceImage | Rename-Item -NewName { $_.Name -replace $oldPart1, $newPart1 -replace $oldPart2, $newPart2}   
    }
}

我可以说我很接近,但我显然遗漏了一些东西。我认为 % 中的 foreach 引起了一些问题。

如果我们坚持您当前的逻辑,您只需要在更新变量时重新读取目录即可。这是必需的,因为一旦文件在每次循环迭代中被重命名,它们就是不同的对象,并且无法再在原始 $sourceImages.

中找到
$csvData = Import-Csv '.\*.csv'

#rename source file
$csvData | % {
    $oldPart1 = $_.OldPart1
    $newPart1 = $_.NewPart1
    $oldPart2 = $_.OldPart2
    $newPart2 = $_.NewPart2
    #get the source images
    $sourceImages = GCI '.\Source_Images' -Recurse
    foreach($sourceImage in $sourceImages){
        $sourceImage | Rename-Item -NewName { $_.Name -replace $oldPart1, $newPart1 -replace $oldPart2, $newPart2}   
    }
}