我有以下代码,用户必须输入Y或N.如果它是ENTER或其他任何它再次请求。该请求每次都在同一行上。
我的问题是,在我输入错误的答案后,当我再次提示时,我必须写下我以前的答案。 我已经尝试在Read-Host之前清除键盘缓冲区而没有运气。我不想使用Clear-Host或新行,它必须在同一行。 我的问题是,在错误的答案后,我可以有一条简洁的线路吗?
function clrkb
{
while($Host.UI.RawUI.KeyAvailable)
{
$Host.UI.RawUI.ReadKey() | Out-Null
}
}
$y_temp +=1;
do
{
clrkb
[Console]::SetCursorPosition(2,$y_temp);write-host Is this a service job? Y/N -f Magenta;[Console]::SetCursorPosition(29,$y_temp);$sj = read-host
}until($sj -eq "Y" -or $sj -eq "N")
答案 0 :(得分:0)
function clrkb{
while(
$Host.UI.RawUI.KeyAvailable){$Host.UI.RawUI.ReadKey() | Out-Null
}
}
$y_temp +=1;
do{
clrkb
[Console]::SetCursorPosition(2,$y_temp);write-host Is this a service job? Y/N -f Magenta;[Console]::SetCursorPosition(29,$y_temp);[Console]::Write(' ' * [Console]::WindowWidth);[Console]::SetCursorPosition(29,$y_temp);$sj = read-host
}until($sj -eq "Y" -or $sj -eq "N")
使用空格覆盖错误的答案。
可能[Console]::WindowWidth
并不总是足够大,因此可以使用$sj.length
代替。
function clrkb{
while(
$Host.UI.RawUI.KeyAvailable){$Host.UI.RawUI.ReadKey() | Out-Null
}
}
$y_temp +=1;
$sj='';
do{
clrkb
[Console]::SetCursorPosition(2,$y_temp);write-host Is this a service job? Y/N -f Magenta;[Console]::SetCursorPosition(29,$y_temp);[Console]::Write(' ' * $sj.length);[Console]::SetCursorPosition(29,$y_temp);$sj = read-host
}until($sj -eq "Y" -or $sj -eq "N")