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

PowerShell提取JPG的EXIF拍摄日期并转换格式求助

解决PowerShell提取EXIF拍摄日期并生成yyyy-MM-dd格式文件夹的问题

嘿,这事儿我熟!你确实只是漏了个日期格式化的小参数调整,分分钟就能搞定~

问题根源

你当前的脚本应该是直接沿用了系统默认的短日期格式(比如MM-dd-yyyy),或者在格式化时用错了格式字符串。核心是要把提取到的拍摄日期字符串先转换成DateTime对象,再明确指定你想要的yyyy-MM-dd格式输出。

修正后的PowerShell脚本示例

这里提供两种可靠的实现方式:

方式1:原生PowerShell实现(无需额外工具)

# 替换为你的照片路径
$photoPath = "C:\Photos\your-photo.jpg"
$photo = Get-Item $photoPath

# 初始化Shell对象获取EXIF属性
$shell = New-Object -ComObject Shell.Application
$folder = $shell.Namespace($photo.DirectoryName)
# 12是"Date Taken"的属性索引(多数Windows系统通用)
$dateTakenRaw = $folder.GetDetailsOf($folder.ParseName($photo.Name), 12)

# 关键步骤:先将原始日期字符串转为DateTime对象,再指定目标格式
# 注意:如果你的系统返回的原始日期格式不是"MM/dd/yyyy HH:mm:ss",请替换成对应格式
$dateTaken = [DateTime]::ParseExact($dateTakenRaw, "MM/dd/yyyy HH:mm:ss", $null)
$targetFolderName = $dateTaken.ToString("yyyy-MM-dd")

# 创建目标文件夹(-Force参数会自动跳过已存在的文件夹)
$targetPath = Join-Path $photo.DirectoryName $targetFolderName
New-Item -ItemType Directory -Path $targetPath -Force

方式2:用ExifTool实现(更稳定,不受系统区域影响)

如果你已经安装了ExifTool(处理EXIF数据的专业工具,推荐使用),代码会更简洁:

# 替换为你的照片路径
$photoPath = "C:\Photos\your-photo.jpg"

# 直接提取并格式化拍摄日期为yyyy-MM-dd
$targetFolderName = exiftool -DateTimeOriginal -s3 -d "%Y-%m-%d" $photoPath

# 创建文件夹
$targetPath = Join-Path (Split-Path $photoPath -Parent) $targetFolderName
New-Item -ItemType Directory -Path $targetPath -Force

关键注意点

  • 如果你用Shell.Application的方法,GetDetailsOf的属性索引(示例中的12)可能因系统语言/版本略有不同,若返回空值,可以通过遍历索引找到正确的"Date Taken"索引:
    $shell = New-Object -ComObject Shell.Application
    $folder = $shell.Namespace("C:\Photos")
    for ($i=0; $i -le 200; $i++) {
        Write-Host "$i : $($folder.GetDetailsOf($folder.Items, $i))"
    }
    
  • 一定要先将原始日期字符串转为DateTime对象再格式化,避免直接对字符串操作导致的格式混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:24:43