11

有没有办法更新powershell中命令输出的当前行?

我知道如何写到同一行:

Write-Host "hello " -NoNewLine

Write-Host "world!" -NoNewLine

但是有没有办法完成替换当前行?就像是:

Write-Host "hello "
Write-Host "world!" -ReplaceLine

提前致谢!


解决方案:

Write-Host "hello " -NoNewLine
Write-Host "`rworld!"
4

2 回答 2

16

使用回车返回到行首: `r

看到这个: http ://ss64.com/ps/syntax-esc.html

以及回车的定义: http ://en.wikipedia.org/wiki/Carriage_return

如果你想清除一行,那还有一大堆空格。否则你可以覆盖东西。

我不能在这里写一个例子,因为它是 SO 的代码字符,但把它放在“世界”字符串的开头,它应该可以工作。

希望这可以帮助!

于 2013-09-06T14:56:35.157 回答
2

正如其他人所指出的,解决方案是在写入主机时使用回车。确保使用NoNewLine标志write-host,否则它将不起作用。

回车是通过使用来实现的:`r

这是一个说明这个答案的小例子:

$up = $true
$finish = $false
$timeout = 50
Write-Host "Updating" -NoNewline
do {
    for ($i=0;$i -le 100;$i++){
        if ($i -eq 100){$up = !$up}
        if ($up){
            $str = ""
            $x=99-$i
            for($z=0;$z -le $i;$z++){$str+="."}
            for($y=0;$y -le $x;$y++){$str+=" "}
            Write-host "`rUpdating$str" -NoNewline
            Start-Sleep -Milliseconds $timeout
        }else{
            $str = ""
            $x=99-$i
            for($y=0;$y -le $x;$y++){$str+="."}
            for($z=0;$z -le $i;$z++){$str+=" "}
            Write-host "`rUpdating$str" -NoNewline
            Start-Sleep -Milliseconds $timeout
        }
    }
    if ($timeout -le 0){$finish = $true}
    $timeout-=10
} until ($finish)
$str = ""
for ($i=0;$i -le 93;$i++){$str+=" "}
Write-Host "`rUpdate Complete!$str"
Read-Host "Press [ENTER] to close this Window"
于 2019-04-01T19:25:57.187 回答