is there a way to update the current line of the command output in powershell?
i know how to write to the same line:
Write-Host \"hello \" -NoNewLine
The solution is to use carriage return while writing to the host, as noted by others.
Make sure to use the NoNewLine
flag whith write-host
or it will not work.
Carriage Return is acheived by using: `r
Here's a small example illustrating this answer:
$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"
Use carriage return to return to the start of the line: `r
See this: http://ss64.com/ps/syntax-esc.html
And definition of carriage return: http://en.wikipedia.org/wiki/Carriage_return
If you want to clear a line, that and a load of spaces. Otherwise you can overwrite stuff.
I can't really write up an example here as it's SO's code character, but put it at the start of the "world" string and it should work.
Hope this helps!