Powershell - 使用Date Taken属性重命名文件

时间:2016-08-07 01:52:07

标签: powershell file-rename

我的三星手机上有一堆图像和视频。我将这些图像复制到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

3 个答案:

答案 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模块。它从图片中提取日期和时间,并将图片的名称更改为。

Change name of photograph to date time

它允许使用-Recurse -Replace和-Verbose参数。默认情况下,它会在与工作目录相同的级别创建reuslt文件夹。

如果您需要更改目标名称的格式,可以找到代码here