我有一堆图像文件,它们被意外地重命名为“双倍”的文件扩展名(例如IMG_1469.jpg.jpg
)。我编写了一个脚本来删除多余的文件扩展名,但出于某种原因,根据文件扩展名是全部大写还是全部小写,它的运行方式会有所不同。如果扩展名是小写,它会按预期运行。
给定同一文件夹中的两个文件,文件名如下:
$FileA = IMG_1468.JPG.JPG
$FileB = IMG_1469.jpg.jpg
$file = Get-ChildItem -Path "\\UNC\Path\To\File" | Where-Object -Property Name -EQ $FileA
If (($file.BaseName).Length -GT 3) {
$extCheck = ($file.BaseName).Substring(($file.BaseName).Length - 4,4)
Write-Host "extCheck =" $extCheck
If ($file.Extension -EQ $extCheck) {
$oldName = $file.Name
Write-Host "oldName =" $oldName
Write-Host "File.Extension =" $file.Extension
$newName = ($oldName).Split($extCheck)[0]+$file.Extension
Write-Host "newName =" $newName
$file | Rename-Item -NewName { $newName }
}
}
使用 $FileA 输出:
extCheck = .JPG
oldName = IMG_1468.JPG.JPG
File.Extension = .JPG
newName = IM.JPG
What if: Performing the operation "Rename File" on target
"Item: \UNC\Path\To\File\IMG_1468.JPG.JPG
Destination: \\UNC\Path\To\File\IMG.JPG".
使用 $FileB 输出:
extCheck = .jpg
oldName = IMG_1469.jpg.jpg
File.Extension = .jpg
newName = IMG_1469.jpg
What if: Performing the operation "Rename File" on target
"Item: \UNC\Path\To\File\IMG_1469.jpg.jpg
Destination: \\UNC\Path\To\File\IMG_1469.jpg".
有人知道为什么 .Split 会从基本名称中删除“IM”之后的所有内容,而不是.JPG
像删除额外的扩展名那样直接删除吗.jpg
?
答案1
感谢@Lee_Daily
$FileA.BaseName -replace $FileA.Extension, ''
将此 >>> <<< 转换'IMG_1468.JPG.JPG'
为此 >>>'IMG_1468'
<<< 之后,您只需将 .Extension 添加回剩余部分即可
我仍然不知道为什么 .Split 会这样表现,但是按照 @Lee_Daily 的建议重写 $newName 定义似乎与大写无关(从而解决了我的根本问题):
$newBaseName = $file.BaseName -replace $file.Extension
$newName = $newBaseName+$file.Extension
Write-Host "newName =" $newName
$file | Rename-Item -NewName { $newName } -WhatIf
即使输入的是 $FileA 的大写值,这也现在可以给我我想要的输出:
extCheck = .JPG
oldName = IMG_1468.JPG.JPG
File.Extension = .JPG
newName = IMG_1468.JPG
What if: Performing the operation "Rename File" on target
"Item: \UNC\Path\To\File\IMG_1468.JPG.JPG
Destination: \\UNC\Path\To\File\IMG_1468.JPG".