使用 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}
}
}
我有一个源图像文件夹 (.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}
}
}