Powershell:更新当前输出线

问题描述 投票:6回答:2

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

我知道怎么写到同一行:

Write-Host "hello " -NoNewLine

Write-Host "world!" -NoNewLine

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

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

提前致谢!


解:

Write-Host "hello " -NoNewLine
Write-Host "`rworld!"
powershell command-line output
2个回答
13
投票

使用回车返回到行的开头:`r

见:http://ss64.com/ps/syntax-esc.html

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

如果你想清除一条线,那就是一堆空格。否则你可以覆盖东西。

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

希望这可以帮助!


0
投票

解决方案是在写入主机时使用回车,如其他人所述。确保使用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"
© www.soinside.com 2019 - 2024. All rights reserved.