Batch file 成批编写实时进度条

Batch file 成批编写实时进度条,batch-file,Batch File,我想使用一个实时进度条,它会随着代码的编写、安装或加载文件而更新 例如: @echo off :main echo Updating file... [PROGRESS BAR HERE] “此处的进度条”表示我希望实时进度条放置在的部分。只是一个骨架。根据需要进行调整 基本思想是使用进度条输出行,并使用结束回车符返回,以返回到行的开头,并能够在上一个状态的基础上重新绘制下一个状态 所有“有问题”的代码都打包到子例程中,因此您只需调用:drawProgressBar percentValue

我想使用一个实时进度条,它会随着代码的编写、安装或加载文件而更新

例如:

@echo off

:main
echo Updating file...
[PROGRESS BAR HERE]

“此处的进度条”表示我希望实时进度条放置在的部分。

只是一个骨架。根据需要进行调整

基本思想是使用进度条输出行,并使用结束回车符返回,以返回到行的开头,并能够在上一个状态的基础上重新绘制下一个状态

所有“有问题”的代码都打包到子例程中,因此您只需调用:drawProgressBar percentValue“operationText”

@echo关闭
setlocal enableextensions disabledelayedexpansion
对于(0 1 100)do中的/l%%f(
调用:drawProgressBar%%f“带有长文本的向上测试,除非您有足够的空间,否则无法在屏幕上显示”
)
对于(100-10)do中的/l%%f(
调用:drawProgressBar%%f“下降测试”
)
对于(0 5 100)do中的/l%%f(
调用:drawProgressBar!随机!“随机测试”
)
rem使用后清洁所有设备
调用:finalizeProgressBar 1
调用:initProgressBar“|”
调用:drawProgressBar 0“这是一个自定义进度条”
对于(0 1 100)do中的/l%%f(
呼叫:drawProgressBar%%f
)
端部
退出/b
:drawProgressBar值[文本]
如果“%~1”==”转到:eof
如果未定义pb.barArea调用:initProgressBar
setlocal enableextensions enabledelayedexpansion
设置/a“pb.value=%~1%%101”、“pb.filled=pb.value*pb.barArea/100”、“pb.Dottered=pb.barArea pb.filled”、“pb.pct=1000+pb.value”
设置“pb.pct=%pb.pct:~-3%”
如果“%~2”=”(设置“pb.text=”)否则(
设置“pb.text=%~2%pb.back%”
设置“pb.text=!pb.text:~0,%pb.textArea%!”
)
在窗口标题中显示进度条要简单得多:

@echo off
setlocal EnableDelayedExpansion

rem Count the number of files in this dir (just as an example)
set n=0
for %%f in (*.*) do set /A n+=1

rem Fill "bar" variable with 70 characters
set "bar="
for /L %%i in (1,1,70) do set "bar=!bar!X"

rem Fill "space" variable with filler spaces
set "space="
for /L %%i in (1,1,110) do set "space=!space!_"

rem "Process" the files and show the progress bar in the title
set i=0
echo Processing files:
for %%f in (*.*) do (
   set /A i+=1, percent=i*100/n, barLen=70*percent/100
   for %%a in (!barLen!) do title !percent!%%  !bar:~0,%%a!%space%
   echo !i!- %%f
   ping -n 1 localhost > NUL
)

title MS-DOS

也许您必须稍微调整一下条形图的长度和空间变量…

好的,进度条的使用应该与正在运行的安装一起进行。我已经通过在脚本中查询任务列表解决了这个问题。例如,我放置了notepad.exe,因此进度条将一直运行,直到notepad关闭,替换vairable myapp=setup.exe,它将对另一个应用程序执行相同的操作。我已经让我的脚本随着进度条的移动而改变颜色

@echo off
set load=
set loadnum=0
set flash=0

set installspeed=2
set myapp=notepad.exe

:progressinstall
set load=%load%Û
cls
echo.
echo.
echo.
echo  INSTALLING PLEASE WAIT
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo  %load%
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
ping localhost -n %installspeed% >nul
set/a loadnum=%loadnum% +1
set/a flash=%flash% +1
if %flash% == 9 set flash=0
color 0%flash%
if %loadnum% == 24 set/a loadnum=0 & set load=
tasklist | find "%myapp%" > NUL
If errorlevel 1 goto installcomplete
goto progressinstall

:installcomplete
color 07
cls
echo.
echo.
echo.
echo  INSTALLATION COMPLETE
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo  ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
pause
cls
exit

“更新文件”的操作是什么?不,这只是个例子。它可以是任何更新进度的东西。所有这些都是进度条所必需的吗?没有一行吗?@Alph.Dev,我在更新的答案上发布了一个略短的版本来更新代码。代码做了很多事情:确定屏幕宽度、创建填充缓冲区、检索所需的特殊字符,但一旦包含在批处理文件中,您几乎只需要调用
call:drawProgressBar
。但是你不需要这些代码,只需要你需要的部分。其基本思想就是在屏幕上不断覆盖同一行。
@echo off
set load=
set loadnum=0
set flash=0

set installspeed=2
set myapp=notepad.exe

:progressinstall
set load=%load%Û
cls
echo.
echo.
echo.
echo  INSTALLING PLEASE WAIT
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo  %load%
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
ping localhost -n %installspeed% >nul
set/a loadnum=%loadnum% +1
set/a flash=%flash% +1
if %flash% == 9 set flash=0
color 0%flash%
if %loadnum% == 24 set/a loadnum=0 & set load=
tasklist | find "%myapp%" > NUL
If errorlevel 1 goto installcomplete
goto progressinstall

:installcomplete
color 07
cls
echo.
echo.
echo.
echo  INSTALLATION COMPLETE
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo  ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
pause
cls
exit