Powershell读取大型文件的元数据

Powershell读取大型文件的元数据,powershell,metadata,Powershell,Metadata,我有一个脚本,可以循环浏览我拍摄的大量图像,并读取焦距和相机模型,显示焦距和总焦距的图表(这对于帮助确定下一次购买镜头非常有用,但这不是重点) 这对于10MB以下的JPG图像来说效果绝对不错,但一旦它碰到接近20MB的原始文件(如佳能的CR2格式),就会抛出“内存不足”错误 有没有办法增加Powershell中的内存限制,或者只读取文件的元数据而不加载整个文件 这是我目前正在使用的: #通过静态调用.NET中的方法加载图像 $image=[System.Drawing.Imaging.Metaf

我有一个脚本,可以循环浏览我拍摄的大量图像,并读取焦距和相机模型,显示焦距和总焦距的图表(这对于帮助确定下一次购买镜头非常有用,但这不是重点)

这对于10MB以下的JPG图像来说效果绝对不错,但一旦它碰到接近20MB的原始文件(如佳能的CR2格式),就会抛出“内存不足”错误

有没有办法增加Powershell中的内存限制,或者只读取文件的元数据而不加载整个文件

这是我目前正在使用的:

#通过静态调用.NET中的方法加载图像
$image=[System.Drawing.Imaging.Metafile]::FromFile($file.FullName)
#尝试获取ExIf数据(如果找不到数据,则自动失败)
# http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html
尝试
{
#从元数据代码37386获取焦距
$focalLength=$image.GetPropertyItem(37386).Value[0]
#从元数据代码272获取模型数据
$modelByte=$image.GetPropertyItem(272)
#将模型数据从字节数组转换为字符串
$imageModel=$Encode.GetString($modelByte.Value)
#卸载图像
$image.Dispose()
}
抓住
{
#别碰那东西
}
我尝试过在这里使用这个解决方案:但是CR2文件只返回任何属性的空格

非常感谢您的帮助

我用于获取图像上的EXIF数据。 我从未在.CR2上测试过它,而是在大约15MB的.CRW上测试过

试试看,让我知道。

我用于获取图像上的EXIF数据。 我从未在.CR2上测试过它,而是在大约15MB的.CRW上测试过


请尝试并让我知道。

问题是发生错误时图像对象未得到处理。当出现错误时,执行退出try块,这意味着
Dispose
调用永远不会执行,内存也永远不会返回

要解决此问题,必须在try/catch结束时将
$image.Dispose()
调用放入
finally
块中。像这样

try
{
  /* ... */
}
catch
{
  #do nothing with the catch
}
finally
{
  # ensure image is always unloaded by placing this code in a finally block
  $image.Dispose()
}

问题是,发生错误时,图像对象没有得到处理。当出现错误时,执行退出try块,这意味着
Dispose
调用永远不会执行,内存也永远不会返回

要解决此问题,必须在try/catch结束时将
$image.Dispose()
调用放入
finally
块中。像这样

try
{
  /* ... */
}
catch
{
  #do nothing with the catch
}
finally
{
  # ensure image is always unloaded by placing this code in a finally block
  $image.Dispose()
}

不幸的是,该模块无法处理.CR2文件:-(Get-EXIF只返回大量令人讨厌的空白条目。请返回绘图板!不幸的是,该模块无法处理.CR2文件:-(Get-EXIF只是返回一堆令人讨厌的空白条目。回到绘图板!不幸的是,在添加Finally块后,我仍然收到以下异常;异常调用“FromFile”并带有“1”参数):“内存不足”在C:\Users\Alexander\Documents\Powershell\get FocalLength.ps1:36 char:57+$image=[System.Drawing.Imaging.Metafile]::FromFile不幸的是,在添加Finally块后,我仍然收到以下异常;异常调用带有“1”参数的“FromFile”:“内存不足”在C:\Users\Alexander\Documents\Powershell\get FocalLength.ps1:36 char:57+$image=[System.Drawing.Imaging.Metafile]::FromFile