【发布时间】:2021-06-06 20:06:48
【问题描述】:
为了学习 Powershell,我编写了一个脚本,从列表中随机选择一部电影,直到列表用完,但是,在列表的末尾,我希望 shell 保持打开...我尝试了很多选项Break/Return/exit... 无事可做... 尝试将最后一个 if 条件添加到 while 条件中,但不起作用,在列表末尾出现一条错误消息,指出数组为空/null,或者 shell 在最后一部电影后退出......
是的,我可以用pause 代替return,因为那个脚本没问题,但它似乎不是一个“优雅”的解决方案...
锦上添花将是修剪电影名称扩展名的更好选择..!因为在我的模式中,电影名称以"m"、"k" 或"v" 结尾,这些字符与".mkv" 表达式一起被修剪掉! :)
有人可以开车送我吗?
这是代码:
$LastFile = (Get-Item "F:\DATA\Films list\*" | Where-Object {$_.Name -match "Title"} | sort LastWriteTime | select -last 1).FullName
$TitleList = Get-Content $LastFile | where { $_ -notmatch "4K" }
$TitleList.Count
$Listed = New-Object System.Collections.ArrayList
Foreach ( $film in $TitleList ) {
$Listed.Add("$film") | out-null
}
$RandomFilm = Get-Random -InputObject $Listed
Write-Host $RandomFilm.Trim('.mkv') -ForegroundColor Green
$Listed.Remove("$RandomFilm")
$TitleCount = 1
echo "_________________________________________________________________________________________"
echo "`n`n"
$Answer = Read-Host "RETURN for new film, q for quitting..."
while ( "q" -notcontains $Answer) {
echo "`n`n"
$RandomFilm = Get-Random -InputObject $Listed
if ( $RandomFilm -ne $null ) {
Write-Host $RandomFilm.Trim('.mkv') -ForegroundColor Green
$Listed.Remove("$RandomFilm")
$TitleCount++
$TitleCount
if ( $TitleCount -gt $TitleList.Count ) {
Write-Host "END OF LIST..." -ForegroundColor red
Return
}
else {
echo "_________________________________________________________________________________________"
echo "`n`n"
$Answer = Read-Host "RETURN for new film, q for quitting..."
}
}
}
【问题讨论】:
标签: powershell while-loop exit break