有没有办法更新powershell中命令输出的当前行?
我知道如何写到同一行:
Write-Host "hello " -NoNewLine
Write-Host "world!" -NoNewLine
但是有没有办法完成替换当前行?就像是:
Write-Host "hello "
Write-Host "world!" -ReplaceLine
提前致谢!
解决方案:
Write-Host "hello " -NoNewLine
Write-Host "`rworld!"
有没有办法更新powershell中命令输出的当前行?
我知道如何写到同一行:
Write-Host "hello " -NoNewLine
Write-Host "world!" -NoNewLine
但是有没有办法完成替换当前行?就像是:
Write-Host "hello "
Write-Host "world!" -ReplaceLine
提前致谢!
解决方案:
Write-Host "hello " -NoNewLine
Write-Host "`rworld!"
使用回车返回到行首: `r
看到这个: http ://ss64.com/ps/syntax-esc.html
以及回车的定义: http ://en.wikipedia.org/wiki/Carriage_return
如果你想清除一行,那还有一大堆空格。否则你可以覆盖东西。
我不能在这里写一个例子,因为它是 SO 的代码字符,但把它放在“世界”字符串的开头,它应该可以工作。
希望这可以帮助!
正如其他人所指出的,解决方案是在写入主机时使用回车。确保使用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"