我的三星手机上有一堆图像和视频。我将这些图像复制到USB然后复制到我的电脑上。
我想使用Powershell根据他们的Date Taken属性重命名这些文件。
所需格式= yyyy-MM-dd HH.mm.ss ddd
我一直在使用Powershell脚本(见下文)使用Date Modified属性来完美地执行此操作,但上面的副本以某种方式更改了我的Date Modified值(WTH!),所以我现在不能使用它(因为它不准确)。
Get-ChildItem | Rename-Item -NewName {$_.LastWriteTime.ToString("yyyy-MM-dd HH.mm.ss ddd") + ($_.Extension)}
总结一下 - 有没有办法根据Date Taken文件属性更改文件名?我在网上看到的建议需要使用.NET System.Drawing.dll
和复杂的代码(我确信它有效,但该死的很难看)。
GG
答案 0 :(得分:1)
我把一堆其他答案粘在一起制作一个批量脚本。相信那些,但Chrome崩溃了,我丢失了Stack上的其他网页。这仅适用于照片文件,并将所有文件重命名为YYYYMMDD_HHMMSS.jpg格式。
这是:
$nocomment = [reflection.assembly]::LoadWithPartialName("System.Drawing")
get-childitem *.jpg | foreach {
$pic = New-Object System.Drawing.Bitmap($_.Name)
$bitearr = $pic.GetPropertyItem(36867).Value
$string = [System.Text.Encoding]::ASCII.GetString($bitearr)
$date = [datetime]::ParseExact($string,"yyyy:MM:dd HH:mm:ss`0",$Null)
[string] $newfilename = get-date $date -format yyyyMd_HHmmss
$newfilename += ".jpg"
$pic.Dispose()
rename-item $_ $newfilename -Force
$newfilename
}
答案 1 :(得分:0)
为了避免这个错误:
New-Object : Cannot find type [System.Drawing.Bitmap]: verify that the assembly containing this type is
loaded.
...
确保在执行上述代码之前加载了所需的程序集:
add-type -AssemblyName System.Drawing
答案 2 :(得分:0)
请结帐 Set-PhotographNameAsDateTimeTaken Powershell模块。它从图片中提取日期和时间,并将图片的名称更改为。
它允许使用-Recurse -Replace和-Verbose参数。默认情况下,它会在与工作目录相同的级别创建reuslt文件夹。
如果您需要更改目标名称的格式,可以找到代码here。