退出while循环,但保持shell打开:powershell



为了学习Powershell,我写了一个脚本,从列表中随机选择一部电影,直到列表用完,但是,在列表结束时,我希望shell保持打开…我已经尝试了很多选项Break/Return/exit…什么也做不了……试图将最后一个if条件添加到while条件中,但不工作,在列表的末尾出现错误消息说数组为空/null,或shell在最后一部电影后退出…

是的,我可以用pause代替return,因为那个脚本是可以的,但它似乎不"优雅"。解决方案…

锦上添花将是一个更好的选择,从电影名称修剪扩展…!因为在我的模式中,电影名称以"m","k""v"结尾,这些字符与".mkv"表达式一起被修剪!:)

有人能开车送我吗?这是代码:

$LastFile = (Get-Item "F:DATAFilms 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运行脚本,那么脚本末尾的$Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")是一个不错的选择(这将不适用于powershell_ise)。在ISE中,您可以在末尾添加一个read-host。如果您是从快捷方式运行脚本,您可以添加-NoExit: powershell.exe -NoExit -file .script.ps1

锦上添花将是一个更好的选择,从电影名称修剪扩展…!因为在我的模式中,电影名称以"m", "k"或"v"结尾,这些字符会与"。mkv"一起被修剪掉。表达!:)

这部分我不太明白,你能详细说明一下吗?

相关内容

  • 没有找到相关文章

最新更新