【发布时间】:2020-03-21 11:50:40
【问题描述】:
我正在尝试通过翻译我为使用 FFmpeg 转换视频而制作的旧批处理脚本来学习 PowerShell。
我相信这与手头的问题几乎没有关系。
这是给我带来麻烦的代码sn-p:
[string]$FileList = (Get-Clipboard).Split("`n")
[int]$Counter = 0
$List = @(ForEach ($i in $FileList)
{
[PSCustomObject]
@{
VideoHeight = (ffprobe.exe -v error -select_streams v:0 -show_entries stream=height -of csv=s=x:p=0 "$i")
VideoDuration = (ffprobe.exe -v error -select_streams v:0 -show_entries stream=duration -of csv=s=x:p=0 "$i")
}
$Counter++
})
将剪贴板中的文件列表存储在$FileList 中,并用新行分隔。
在$Counter 中存储整数0。
对于$FileList 中的每个项目,创建一个包含项目高度和持续时间的新对象,并将$Counter 加1。
看起来很简单,对吧?这里有个问题:如果$FileList 中只有一个高度为 1080 的文件,$List.VideoHeight[0] 将只返回 1,但如果 $FileList 中至少有两个文件,$List.VideoHeight[0] 将返回 1080 .
命令行输出:
Single File
$List.VideoHeight:
1080
$List.VideoHeight[0]:
1
Multiple Files
$List.VideoHeight:
1080
1080
720
$List.VideoHeight[0]:
1080
有什么想法吗?我被卡住了。
【问题讨论】:
-
顺便说一句:我假设
[string]$FileList应该是[string[]]$FileList- 否则,您的foreach循环将无法工作。
标签: powershell powershell-5.0 pscustomobject