Это работает здесь (очень быстро!):
РЕДАКТИРОВАТЬ : Код изменен для "бара с переменными шагами"
@echo off
SetLocal EnableDelayedExpansion
rem Define the "amounts" of each one of the (7) steps that comprise this job
set "amounts= 10 6 2 9 3 7 4"
set width=60
set "off="
set "on="
for /F "tokens=1,2" %%X in ('FORFILES /M "%~nx0" /C "cmd /c echo 0xDB 0xB0"') do (
for /L %%i in (1,1,%width%) do set "on=!on!%%X" & set "off=!off!%%Y"
)
rem Get CR, BS and TAB ASCII control characters:
for /F %%a in ('copy /Z "%~f0" nul') do set "CR=%%a"
for /F %%a in ('echo prompt $H ^| cmd') do set "BS=%%a"
set "TAB="
rem First, try the method for Windows XP
for /F "skip=4 delims=pR tokens=2" %%a in ('reg query hkcu\environment /v temp' ) do set "TAB=%%a"
rem Then, the method for newer versions
rem http://www.dostips.com/forum/viewtopic.php?f=3&t=1733&p=6840#p6853
for /F "tokens=2 delims=0" %%a in ('shutdown /? ^| findstr /BC:E') do if not defined TAB set "TAB=%%a"
rem String to go up one line in SET /P command
set "LineUp=%TAB%!BS!!BS!!CR!"
cls
echo Percentage of values processed
echo/
echo %TAB%%off%
echo %TAB%Percent: 0%%
echo %TAB%Processing: 0/%processValue%
set /A "processValue=0, summa=0"
for %%a in (%amounts%) do set /A processValue+=%%a
for %%N in (%amounts%) do (
set /A "summa+=%%N, Percent=summa*100/processValue, PercentOn=Percent*width/100
for %%i in (1,1,4) do set /P "=.!LineUp!" < nul
for %%p in (!PercentOn!) do echo %TAB%!on:~0,%%p!
echo %TAB%Percent: !Percent!%%
echo %TAB%Processing: !summa!/%processValue% (current: %%N^)
timeout /T %%N > nul
)
![enter image description here](https://i.stack.imgur.com/ZrX5Q.png)
Подробнее о методе "go вверх на одну строку" см. Переместить курсор на любую позицию , используя только команду ECHO
ПРИМЕЧАНИЕ : метод перемещения курсора на одну строку работает во всех Windows версиях , за исключением Windows 10 с использованием новой консоли . Чтобы этот метод работал, вам нужно включить «Legacy mode» в консоли окна cmd.exe ...