为了学习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"一起被修剪掉。表达!:)
这部分我不太明白,你能详细说明一下吗?