如何使用PowerShell编辑已写入控制台的文本?

时间:2015-05-14 15:04:45

标签: powershell

例如,robocopy将显示正在复制的文件的百分比。百分比将更改,而无需向控制台写入更多输出。如何模拟已经写入控制台的文本被修改的相同行为?

3 个答案:

答案 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"