【问题标题】:Powershell - rename file using Date Taken attributePowershell - 使用 Date Taken 属性重命名文件
【发布时间】:2019-01-29 05:25:34
【问题描述】:

我的三星手机上有一堆图片和视频。我将这些图像复制到 USB 上,然后复制到我的 PC 上。

我想使用 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)}

总之 - 有没有办法根据拍摄日期文件属性更改文件名?我在网上看到的建议需要使用 .NET System.Drawing.dll 和复杂的代码(我确信它有效,但该死的丑陋)。

GG

【问题讨论】:

  • 您查看过微软脚本中心发布的function 吗?看起来它可以满足您的需求。
  • 如果您不想使用System.Drawing 来提取DateTaken 属性,那么改用文件的CreationTime 属性怎么样?

标签: powershell file-rename


【解决方案1】:

请查看 Set-PhotographNameAsDateTimeTaken Powershell 模块。它从图片中提取日期和时间并将图片的名称更改为它。

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

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

【讨论】:

【解决方案2】:

我将一堆其他答案“粘合”在一起,制作了一个批量脚本。归功于这些,但 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
}

【讨论】:

    【解决方案3】:

    为了避免这个错误:

    New-Object : Cannot find type [System.Drawing.Bitmap]: verify that the assembly containing this type is
    loaded.
    ...
    

    确保在执行上述代码之前加载了所需的程序集:

    add-type -AssemblyName System.Drawing
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-31
      • 2021-08-27
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多