例如,robocopy将显示正在复制的文件的百分比。百分比将更改,而无需向控制台写入更多输出。如何模拟已经写入控制台的文本被修改的相同行为?
答案 0 :(得分:2)
你可以尝试这样的事情。它使用$host.UI.RawUI.CursorPosition
来确定控制台文本当前正在编写和操作的位置
覆盖以前写过的文字。
简单测试
我已经调整了你的" Lorem ipsum"示例使用$host.UI.RawUI.CursorPosition
。
$text = "Lorem ipsum dolor sit amet"
$origpos = $host.UI.RawUI.CursorPosition
Write-Host $text -NoNewLine
Start-Sleep -s 4
$host.UI.RawUI.CursorPosition = $origpos
Write-Host "consectetur adipiscing elit"
以下示例将循环$scroll
中的字符,给人一种旋转线的印象。所有这一切都是运行一个睡眠命令10秒。根据您的需要,您显然不需要运行所有此代码。
$scroll = "/-\|/-\|"
$idx = 0
$job = Invoke-Command -ComputerName $env:ComputerName -ScriptBlock { Start-Sleep -Seconds 10 } -AsJob
$origpos = $host.UI.RawUI.CursorPosition
$origpos.Y += 1
while (($job.State -eq "Running") -and ($job.State -ne "NotStarted"))
{
$host.UI.RawUI.CursorPosition = $origpos
Write-Host $scroll[$idx] -NoNewline
$idx++
if ($idx -ge $scroll.Length)
{
$idx = 0
}
Start-Sleep -Milliseconds 100
}
# It's over - clear the activity indicator.
$host.UI.RawUI.CursorPosition = $origpos
Write-Host 'Complete'
警告:这个和测试都无法在ISE中按预期工作。如果没有正确使用,你的光标可能会在一个奇怪的地方结束。
答案 1 :(得分:0)
这个答案完全归功于@Bill_Stewart。
$text = "Lorem ipsum dolor sit amet"
Write-Host $text -NoNewLine
Start-Sleep -s 2
for ($i = 0; $i -lt $text.Length; $i++){
Write-Host `b -NoNewLine
}
Write-Host "consectetur adipiscing elit"
答案 2 :(得分:0)
你的答案可以缩短:
$text = "Lorem ipsum dolor sit amet"
Write-Host -NoNewLine "$text`r"
Start-Sleep -Seconds 2
Write-Host -NoNewLine ("`b" * $text.Length)
Write-Host "consectetur adipiscing elit"