You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell批量将照片‘拍摄日期’调整为匹配‘修改日期’

修正照片EXIF拍摄日期与修改日期同步的PowerShell脚本

你可以直接使用下面的整合代码,既保留修正文件LastWriteTime的原有逻辑,又同步更新照片的EXIF拍摄日期(对应属性ID 36867,即DateTimeOriginal字段):

# 加载处理图片EXIF所需的.NET程序集
Add-Type -AssemblyName System.Drawing

# 指定你的照片目录路径
$targetDir = 'directory'

# 遍历目录下的图片文件(可根据需要扩展扩展名)
Get-ChildItem -Path $targetDir -File -Recurse -Include *.jpg,*.jpeg,*.png | ForEach-Object {
    # 第一步:修正文件的修改日期(保留你原有的逻辑)
    $correctedTime = $_.LastWriteTime.AddHours(-1)
    $_.LastWriteTime = $correctedTime

    # 第二步:同步更新EXIF拍摄日期
    try {
        # 以只读模式打开图片,避免占用文件资源
        $image = [System.Drawing.Image]::FromFile($_.FullName, $true)
        
        # 获取EXIF拍摄日期对应的属性项(ID 36867)
        $propItem = $image.GetPropertyItem(36867)
        
        # 将修正后的时间转换为EXIF要求的字符串格式:yyyy:MM:dd HH:mm:ss
        $timeString = $correctedTime.ToString("yyyy:MM:dd HH:mm:ss")
        # 把字符串转为字节数组(EXIF属性值以ASCII字节存储,末尾需加终止符)
        $propItem.Value = [System.Text.Encoding]::ASCII.GetBytes($timeString + [char]0)
        
        # 更新属性并保存图片
        $image.SetPropertyItem($propItem)
        $image.Save($_.FullName)
    }
    catch {
        Write-Warning "处理文件 $($_.FullName) 失败:$($_.Exception.Message)"
    }
    finally {
        # 确保释放图片资源,避免文件被锁定
        if ($image) { $image.Dispose() }
    }
}

关键细节说明:

  • 程序集加载:Add-Type -AssemblyName System.Drawing用于调用.NET的图片处理类,实现EXIF属性的读写。
  • 属性ID 36867:对应EXIF标准里的DateTimeOriginal,就是照片的原始拍摄日期时间字段。
  • 时间格式要求:EXIF规定拍摄日期必须使用yyyy:MM:dd HH:mm:ss格式,不能用-分隔日期,否则会导致属性无法被正确识别。
  • 资源释放:通过try-finally块确保图片资源被及时释放,避免后续操作无法访问文件。
  • 文件过滤:用-Include指定目标图片扩展名,避免处理非图片文件,若你的照片还有其他格式(如*.raw),可自行添加。

注意事项:

  1. 操作前建议先备份少量照片测试,避免失误导致数据丢失。
  2. 部分小众图片格式(如WebP)可能不支持此EXIF属性,脚本会输出警告并跳过。
  3. 若照片原本没有DateTimeOriginal属性,会抛出找不到属性的错误,可在catch块中添加创建新属性项的逻辑(需额外设置PropertyItem的Id、Type和Len字段)。

内容的提问来源于stack exchange,提问作者dedddoo230

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 01:11:23