我有一个文件夹,里面有两部手机拍摄的照片。这两部手机的文件名格式略有不同。我想将其中一部手机的文件名格式改为另一部手机的格式,这样我就有了一个整洁的相册。
我如何将文件名从 更改20110809_121158.jpg
为2011-08-09 12.11.58.jpg
?
如果使用 Powershell 可以解决问题,那就太好了,但也欢迎任何其他选择!
答案1
下面是使用 SubString 来实现的一种方法:
function getNewFileName($fname)
{
$year = $fname.SubString(0,4)
$month = $fname.SubString(4,2)
$day = $fname.SubString(6,2)
$hours = $fname.SubString(9,2)
$minutes = $fname.SubString(11,2)
$seconds = $fname.SubString(13,2)
$new_fname = [string]::Format( "{0}-{1}-{2} {3}.{4}.{5}.jpg", $year,$month,$day,$hours,$minutes,$seconds)
return $new_fname;
}
要使用它来重命名文件夹中选定的文件条目,您可以使用以下命令:
$fileEntries = Get-ChildItem *_* -name
foreach($fileName in $fileEntries)
{
$newFileName = getNewFileName($fileName)
Write-Host -NoNewLine Rename-Item $filename $newFileName
Write-Host
}
按照编写的脚本,该脚本实际上不会更改任何内容 - 它允许您通过将建议的重命名命令输出到控制台来预览将发生的变化。要实际重命名文件,您必须删除“Write-Host”语句。此脚本假定文件夹中只有您提到的两种类型的文件名。
$fileEntries = Get-ChildItem *_* -name
仅选择包含下划线的文件,这样我们就不会尝试重命名其他类型的文件。此脚本应在主题文件夹中运行;在其他地方运行它可能会对错误的文件产生奇怪的影响。