我想重命名已编辑照片的文件名,以便它们按Windows资源管理器顺序显示。
原始文件名是这样的:IMG_1981.jpg
,并且在编辑后,文件名另存为:IMG_E1981.jpg
。
我要实现的是从编辑的文件名中删除E
,并在文件名后添加一些增量。就像IMG_E1981.jpg
变成IMG_1981a.jpg
或IMG_1981(1).jpg
一样,如果文件名匹配,也要递增计数。例如IMG_1981(2)
,IMG_1981(3)
等。
有没有关于简单的.ps
脚本的建议来实现这一目标?
答案 0 :(得分:0)
在不了解您当前使用方式的情况下(请注意Gerhard的评论),您可以尝试执行以下操作
对于以下测试脚本,我创建了一个新目录,其中包含该脚本和一个子目录images
。该文件夹包含另一个名为renamed
的目录。这样我们就可以查看原始文件而无需重命名
$img_path = "$PSScriptRoot\images"
$rename_path = "$PSScriptRoot\images\renamed"
foreach ($img in (Get-ChildItem "$img_path\*.jpg")) {
# note the single quotes at the end - otherwise you need to escape the $-sign
$new_name = $img.Name -replace "_E(\d\d\d\d)", '_$1'
# no image with that name exists
if (!(Test-Path "$rename_path\$new_name")) {
Copy-Item $img "$rename_path\$new_name"
} else {
# image-name already used
$i = 1
$inc_name = $new_name -replace ".jpg", "_$i.jpg"
# creating a new image-name by appending _1, _2, etc. until
# the name is not already used
while (Test-Path "$rename_path\$inc_name") {
Write-Host "Found $inc_name"
$i++
$inc_name = $new_name -replace ".jpg", "_$i.jpg"
}
Copy-Item $img "$rename_path\$inc_name"
}
}
请记住,这肯定是不是解决此问题的理想方法。请尝试更详细地说明您当前的问题。
由于您说要向文件名添加(0)
或(1)
之类的文件,如果文件名已经存在:为什么,该文件名应该已经存在吗?随时共享演示目录内容:-)
答案 1 :(得分:0)
非常感谢@Razorfen。您的代码绝对完美。您的解决方案从文件名中删除了“ E”,并验证是否存在同名文件,并增加_1增量。绝对完美!非常感谢。
我使用批处理文件来调用.PS1脚本。批处理文件的内容如下:
PowerShell.exe -Executionpolicy Bypass -Command "& '%~dpn0.ps1'"
以及.ps1文件中的代码内容(进行了一些小的修改)
$img_path = ".\"
$rename_path = ".\"
foreach ($img in (Get-ChildItem "$img_path\IMG_E*.jpg")) {
# note the single quotes at the end - otherwise you need to escape the $-sign
$new_name = $img.Name -replace "_E(\d\d\d\d)", '_$1'
# no image with that name exists
if (!(Test-Path "$rename_path\$new_name")) {
Copy-Item $img "$rename_path\$new_name"
} else {
# image-name already used
$i = 1
$inc_name = $new_name -replace ".jpg", "_$i.jpg"
# creating a new image-name by appending _1, _2, etc. until
# the name is not already used
while (Test-Path "$rename_path\$inc_name") {
Write-Host "Found $inc_name"
$i++
$inc_name = $new_name -replace ".jpg", "_$i.jpg"
}
Copy-Item $img "$rename_path\$inc_name"
}
}
del IMG_E*.jpg
# deletes IMG_E*.jpg file as a new renamed copy was created above
del *.AAE
# deletes all *.AAE file from directory