Powershell:如何计算多个文件中每个命令的输出行数?

Kno*_*abe 5 powershell

exiftool为它处理的每个文件生成多行输出。我想在目录中的所有 jpg 上调用它,并且想查看每个文件输出了多少行。这样做,

exiftool *.jpg | measure-object -line
Run Code Online (Sandbox Code Playgroud)

给出所有文件的输出总行数,而不是每个文件的行数。我也尝试过这个,

exiftool *.jpg | foreach{get-content $_ | measure-object -line}
Run Code Online (Sandbox Code Playgroud)

但这只是表明我不知道如何使用Powershell(即,我收到很多错误消息)。帮助?

mkl*_*nt0 4

Get-ChildItem -Filter *.jpg |
  ForEach-Object { (exiftool $_.FullName).Count }
Run Code Online (Sandbox Code Playgroud)
  • Get-ChildItem -Filter *.jpg.jpg输出扩展名位于当前目录中的每个文件的文件信息对象。

  • ForEach-Object处理可通过自动$_变量访问的每个文件信息对象,并exiftool通过文件信息对象的属性将其作为完整的文件系统本机路径传递给外部程序.FullName

  • 鉴于 PowerShell逐一发出外部程序输出的行,当通过收集时,这些行(...)相当于一个行数组[1],您可以简单地调用.Count该数组来获取行数。

    • 也就是说,至少在假设上,Measure-Object首先通过管道进行输出行计数,然后应用.Count会减少内存负载(因为行本身不需要首先全部收集在内存中),但会牺牲执行速度。

[1] 对于单个输出行,该行将按原样捕获,但 PowerShell 对集合和标量的统一处理.Count甚至在标量上也公开了属性。