PowerShell如何检查WIA COM对象是否存在指定属性
你可以通过遍历WIA对象的Properties集合判断目标属性是否存在,避免调用不存在的属性报错,两种常用实现方式如下:
方法1:提前校验属性是否存在(推荐)
先获取所有属性名称,判断目标属性是否在集合内,再执行取值逻辑:
# 创建WIA ImageFile对象并加载图片 $image = New-Object -ComObject Wia.ImageFile $image.LoadFile("C:\Absolute\path\to\my.jpg") # 提取所有属性名称列表 $allPropNames = $image.Properties | Select-Object -ExpandProperty Name # 校验GpsLatitude是否存在 if ($allPropNames -contains 'GpsLatitude') { $latitude = $image.Properties.Item('GpsLatitude').Value # 后续处理纬度的自定义逻辑 Write-Host "提取到纬度:$latitude" } else { Write-Host "当前图片无GPS纬度属性" }
方法2:异常捕获(简易写法)
如果不需要精细化的错误区分,直接用try catch包裹取值逻辑即可:
$image = New-Object -ComObject Wia.ImageFile $image.LoadFile("C:\Absolute\path\to\my.jpg") try { $latitude = $image.Properties.Item('GpsLatitude').Value Write-Host "提取到纬度:$latitude" } catch { Write-Host "当前图片无GPS纬度属性" }
批量处理扩展
如果需要批量提取文件夹内所有图片的GPS信息,可以用以下脚本:
Get-ChildItem -Path "C:\目标图片文件夹路径" -Filter *.jpg -Recurse | ForEach-Object { $image = New-Object -ComObject Wia.ImageFile $image.LoadFile($_.FullName) $propNames = $image.Properties | Select-Object -ExpandProperty Name [PSCustomObject]@{ 文件路径 = $_.FullName 纬度 = if ($propNames -contains 'GpsLatitude') { $image.Properties.Item('GpsLatitude').Value } else { "无数据" } 经度 = if ($propNames -contains 'GpsLongitude') { $image.Properties.Item('GpsLongitude').Value } else { "无数据" } } } | Export-Csv -Path "C:\GPS信息导出.csv" -Encoding UTF8 -NoTypeInformation
内容的提问来源于stack exchange,提问作者dwids
相关产品推荐
相关产品推荐

