在 Windows10 批处理文件中增加进度条

在 Windows10 批处理文件中增加进度条

我摘录了我正在使用的批处理文件的一部分。我正在尝试制作进度条,而不是按超时输出数字计数。

我的问题是,如何在循环中动态修改字符串,而不必重新输入字符串的每一步?

@echo off

setlocal enabledelayedexpansion

:: This is to set variables that represent backspace and carriage return.   
:: I begin strings with these, instead of ending strings with only CR,
:: so that the cursor isn't flashing under the first character of the     
:: progress bar. Beginning each string with a space, and ending each 
:: with !CR! only is another possible workaround.

for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"
for /f %%a in ('"prompt $H&for %%b in (0) do rem"') do set "BS=%%a"

<nul set /p"=        [          ]" & Timeout /t 1 >nul
<nul set /p"=!BS!!CR![■         ]" & Timeout /t 1 >nul
<nul set /p"=!BS!!CR![■■        ]" & Timeout /t 1 >nul
<nul set /p"=!BS!!CR![■■■       ]" & Timeout /t 1 >nul
<nul set /p"=!BS!!CR![■■■■      ]" & Timeout /t 1 >nul
<nul set /p"=!BS!!CR![■■■■■     ]" & Timeout /t 1 >nul
<nul set /p"=!BS!!CR![■■■■■■    ]" & Timeout /t 1 >nul
<nul set /p"=!BS!!CR![■■■■■■■   ]" & Timeout /t 1 >nul
<nul set /p"=!BS!!CR![■■■■■■■■  ]" & Timeout /t 1 >nul
<nul set /p"=!BS!!CR![■■■■■■■■■ ]" & Timeout /t 1 >nul
<nul set /p"=!BS!!CR![■■■■■■■■■■]" & Timeout /t 1 >nul

如您所见,我目前输入了 11 个命令(好吧,复制/粘贴然后修改每一行)来创建进度条的进度。

我更希望有一个循环,可以根据循环次数调整条形的宽度,然后每次循环时用块替换最左边的空间。这样我就可以在任意长度的等待中重复使用它,甚至可以显示批处理进程的进度(我不想让这些进程充斥整个屏幕),而不需要每次都进行大量修改。

不幸的是,说实话,我对批处理不是很了解;我知道的足够多的东西可以用 Google-Fu 来破解,但我的搜索词并没有给我带来很好的结果,而且我不确定我尝试做的事情是否可行。任何帮助,哪怕只是一个起点,都会很感激。

答案1

我不确定我是否理解你的问题,但是这里有一个基于子字符串和for /l循环的建议:

@echo off

>nul chcp 65001
set "_spc=          "
set "_bar=■■■■■■■■■■"

setlocal enabledelayedexpansion

for /f %%a in ('copy /Z "%~dpf0" nul')do for /f skip^=4 %%b in ('echo;prompt;$H^|cmd')do set "BS=%%~b" & set "CR=%%a"
for /l %%L in (1 1 10)do <con: set /p "'= !CR!!BS!!CR![!_bar:~0,%%~L!!BS!!_spc:~%%~L!] " <nul & >nul timeout.exe /t 1

endlocal & goto :eof

  • 或者类似这样的:

在此处输入图片描述

@echo off 

>nul chcp 65001 
setlocal enabledelayedexpansion

set "_spc=          "
set "_bar=■■■■■■■■■■" 
set "_msg= Progress bar loop."
<con: color 0A & mode 70,4 & echo\ 

for /f %%a in ('copy/Z "%~dpf0" nul')do for /f skip^=4 %%b in ('echo;prompt;$H^|cmd')do set "BS=%%b" & set "CR=%%a"
for /l %%L in (1 1 10)do <con: set/p "'=!CR!!BS!!CR![!_bar:~0,%%~L!!BS!!_spc:~%%L!]!_msg!"<nul & >nul timeout.exe 1

endlocal & color & goto :eof

其他资源:

相关内容