首页 > 解决方案 > 单行显示路径的数组

问题描述

我被困住了!我觉得我已经尝试了一切并且永远在谷歌上搜索。不管我做什么; 当我尝试列出包含路径的数组时,它们都显示为没有换行符。即使我尝试使用拆分命令,在列出数组时我也无法每行获得一个项目。这是有问题的代码的某些部分...

[System.Collections.ArrayList]$24fps = @()
[System.Collections.ArrayList]$30fps = @()
[System.Collections.ArrayList]$48fps = @()

$video = ".\*.mov"

Get-ChildItem $video -recurse | ForEach-Object {

   $ffprobeFPSData = ffprobe -select_streams V:0 -v 0 -of csv=p=0 -select_streams v:0 -show_entries stream=r_frame_rate $_ | Out-String
   $FPSVariables = $ffprobeFPSData -replace "`n" -replace "" -split '/'
   $averageFPS = [decimal]$FPSVariables[0]/$FPSVariables[1]

   Write-Host "$($_.BaseName)$($_.Extension) - FPS: $($averageFPS)"

   if ([int]$averageFPS -le 26) {
      [array]$24fps.Add($_.FullName)
      $CFRValue = 24
   }
   elseif ([int]$averageFPS -le 35) {
      [array]$30fps.Add($_.FullName)
      $CFRValue = 30
   }
   else {
      [array]$48fps.Add($_.FullName)
      $CFRValue = 48
   }
}

Write-Host "24 FPS: $($24fps)`n"
Write-Host "30 FPS: $($30fps)`n"
Write-Host "48 FPS: $($48fps)`n"

我试过像这样拆分它:有了这个我可以获得单个条目,但我仍然没有想出一种方法来列出它们。这让我觉得我制作数组的方式有问题,但我不知道是什么方式,,,

$test = $30fps -split ' D:'

Write-Host "TEST ARRAY `"$($test[3])`"`n"
Write-Host "TEST ARRAY `"$($test[45])`"`n"

标签: arrayspowershell

解决方案


这是因为Write-Host行为是使用空格作为分隔符而不是换行来连接数组元素。

因此,它本身并不是一个很好的选择。

不过,有多种方法可以做你想做的事。

Out-Host

$30fps | Out-Host

有时您可能真的想使用 Write-Host 添加一些自定义颜色,在这种情况下,您可以Out-String先通过管道传递数组,然后再Write-Host

$30fps | Out-String | Write-Host -ForegroundColor Cyan

或者您可能希望遍历元素以添加任意内容以用于显示目的,例如索引,在这种情况下 aForEach可以解决问题

$index = 0 
$30FPS | Foreach {Write-Host "$("$($index).".PadRight(10,' '))$_";$index+=1}

最后,最接近您编写的是单行Write-Host,但我们首先将数组元素组合成一个多行字符串。

Write-host "$($30fps  -join "`n")"

推荐阅读