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
相关产品推荐
相关产品推荐

