批处理:加载栏不起作用

Batch: loading bar won't work

我已经完成了一个基本的加载栏,但我想不出如何让侧面不随加载栏移动。这是我的代码:

@echo off
title Loading... 
color 0a
set max=11
set num=%~1
set load=
set/a loadnum=0
:Loading
set load=%load%²
set loadnum1=%loadnum1%
cls
echo                                           Loading ""
echo                                         ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo                                         º%load%%loadnum1%           º
echo                                         ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
ping localhost -n 2 >nul
set/a loadnum=%loadnum% +1
set/a loadnum1=%loadnum1% -1
if %loadnum%==16 goto done
goto Loading
:done
cls
timeout 1 >nul
title
color 49
setlocal enabledelayedexpansion

您需要的是可变数量的尾随空格。或多或少地保留你所拥有的...这是一种方法。

@echo off
setlocal enabledelayedexpansion
title Loading... 
color 0a
set max=19
set load=
set /a loadnum=0
set /a loadnum1=0
set "spaces=                    "
:Loading
set load=%load%²
set /a numspaces=%max%-1+%loadnum1%
set "displayspaces=!spaces:~0,%numspaces%!
set loadnum1=%loadnum1%
cls
echo                                           Loading ""
echo                                         ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo                                         º%load%%displayspaces%º
echo                                         ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
ping localhost -n 2 >nul
set /a loadnum+=1
set /a loadnum1+=-1
if %loadnum% LSS %max% goto :Loading
endlocal

在此解决方案中,只需更改一个数字即可更轻松地修改负载栏的宽度;它还最大限度地减少了屏幕上的闪烁,将输出命令封装在一个代码块中,该代码块的执行速度比单行代码快。

@echo off
setlocal EnableDelayedExpansion

set max=16

title Loading... 
color 0a
set "top=É"
set "spaces="
set "bottom=È"
for /L %%i in (1,1,%max%) do (
   set "top=!top!Í"
   set "spaces=!spaces! "
   set "bottom=!bottom!Í"
)
set "top=!top!»"
set "bottom=!bottom!¼"

set /A loadnum=0, loadNum1=max-1
set "load="

:Loading
set "load=%load%²"
(
cls
echo                                           Loading ""
echo                                         %top%
echo                                         º%load%!spaces:~0,%loadnum1%!º
echo                                         %bottom%
)
ping localhost -n 2 >nul
set /A loadnum+=1, loadnum1-=1
if %loadnum% lss %max% goto Loading

cls
timeout 1 >nul
title
color