我想重命名文件集合的.jpg
文件名的一部分。我建立了一个.csv
表,其中包含旧部分名称和新部分名称的列。文件命名为part1.part2.part3.jpg
,我只想替换第 1 部分。该.csv
如下所示:
这是我的代码,它似乎只搜索.csv
每个源图像中的第一个原始名称和第一个新名称,实际上只重命名其中一个图像。
#import naming conventions
$csvData = Import-Csv ".\Orig_to_new.csv"
#rename source file
$csvData | % {
$original = $_.Original
$new = $_.Real
#get the source images
$sourceImages = GCI -Recurse -Filter *.jpg ".\Renamed_Archive"
foreach($sourceImage in $sourceImages){
$sourceImage | Rename-Item -NewName { $_.Name -replace $original, $new}
}
}
理想情况下,脚本会看到每个 sourceImage 的原始名称,并根据.csv
文档将其替换为新名称,例如根据提供的.csv
表将“abc”更改为“xyz”,将“123”更改为“456” 。
免责声明:我之前问过一个类似的问题,并认为我有一个工作模型,但我无法让它发挥作用。
谢谢
您可以使用此脚本的重命名部分,我假设您已经知道该怎么做。
.
分隔符分割它们的名称(我(?=\.)
用来保留点)$csv=@'
Original,New
abc,xyz
123,456
qwe,rty
'@|convertfrom-csv
$nameMap=@{}
$csv.foreach({
if(-not $nameMap.ContainsKey($_.Original))
{
$nameMap.Add($_.Original,$_.New)
}
})
$sourceImages=gci -Recurse -Filter *.jpg -Path .
foreach($image in $sourceImages)
{
$name=$image.Name -split '(?=\.)'
$newPart1=$nameMap[$name[0]]
$name[0]=$newPart1
$newName=-join $name
'Old Name: {0} // New Name: {1}' -f $image.Name,$newName
}
# Looks like this:
PS /~> ./script.ps1
Old Name: 123.part2.part3.jpg // New Name: 456.part2.part3.jpg
Old Name: abc.part2.part3.jpg // New Name: xyz.part2.part3.jpg
Old Name: qwe.part2.part3.jpg // New Name: rty.part2.part3.jpg
编辑:在此处添加完整的脚本代码,以及新的 If 条件。
#import naming conventions
$csv = Import-Csv ".\table.csv"
$nameMap=@{}
$csv.foreach({
if(-not $nameMap.ContainsKey($_.Original)){
$nameMap.Add($_.Original,$_.New)
}
})
#identify files for renaming
$sourceImages = Get-ChildItem -Recurse -Filter *.jpg -Path ".\images"
foreach($image in $sourceImages)
{
$name=$image.Name -split '(?=\.)'
# Adding this If condition, reasoning below.
# Rename files only If the position 0 of the splitted name is in our nameMap hashtable.
# This is because if it's not there you would end up with files named like:
# "..part2.part3.jpg" because $newPart1 var would be null.
if($nameMap.ContainsKey($name[0]))
{
$newPart1=$nameMap[$name[0]]
$name[0]=$newPart1
$newName=-join $name
'Old Name: {0} // New Name: {1}' -f $image.Name,$newName
Rename-Item $image.FullName -NewName $newName
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句