我是dos批处理命令的新手,我想实现如图所示的进度条。首先,您必须初始化过程值并计算其百分比,然后必须使用进度条显示它。
您可以在进度条上执行Alt + 219和Alt + 176
这是我到目前为止所做的。
echo off
cls
SetLocal EnableDelayedExpansion
set processValueString=200
set a/ processValue=200
set a/ percentage=0
echo Process value: %processValueString%
for /l %%a in (1,1, %processValue%) do (
set a/ percentage = %%a / %processValue% * 100
echo Percent: !percentage! %
echo Processing: !a! / %processValue%
)
历史记录:
- ANSI序列被添加为Redstone Update的一部分(然后被删除并再次添加,提到了here),因此脚本仅在Windows 10上有效
- 已删除
FORFILES
,现在快了250倍- [C0的功能版本
- 现在按下Ctrl-C时脚本被中止立即
- 根据@Joseph的请求进行编辑
结合使用@Stephan's Answer和ANSI sequences的能力来打印ASCII字符
FORFILES
FORFILES
来源:
@echo off ^ %=-----------DO NOT REMOVE THIS LINE-----------=% Y %= Y to abort when Ctrl-C is pressed =% %= N to ignore =% SETLOCAL EnableDelayedExpansion ::Defaults ( set LF=^ %=-----------DO NOT REMOVE THIS LINE-----------=% ) FOR /F %%C in ('copy /Z "%~f0" nul') do set "CR=%%C" FOR /F %%E in ('prompt $E ^& ^<nul cmd /k') do set "ESC=%%E" ::SETTINGS color a >nul chcp 65001 mode CON: COLS=120 LINES=31 ::INITIALIZE call :init 0xDB] 0xB0 40 200 echo Starting at %time% <nul set/p=[ >nul 2>nul call :progessBar echo Finished at %time% exit /b :init bar tbd length processvalue ::Custom parameters defined by user set "bar=%~1" set "tbd=%~2" set /a "barlength=%~3" set /a "processvalue=%~4" ::Default values if NOT DEFINED bar set "bar=0xDB" if NOT DEFINED tbd set "tbd=0xB0" ::Set bar & tbd >hex.tmp <hex.tmp ( FOR %%V in (bar tbd) do ( FORFILES /P "%~dp0." /M "%~nx0" /C "cmd /c echo(!%%V!" set/p"%%V=" CLEAR VARIABLE set/p"%%V=" SET VARIABLE )) del hex.tmp exit /b :main >&3 ( echo( for /L %%N in (0 1 %barlength%) do echo(!LF!%ESC%[2A%ESC%[%%NC%tbd% for /L %%N in (0 1 %processvalue%) do ( set/ashowBar=%%N*barlength/processvalue,percentage=%%N*100/processvalue echo(Percent: !percentage!%%!LF!Processing: %%N / %processvalue%!LF!%ESC%[3A%ESC%[!showBar!C%bar% ) echo(!LF! ) exit /b :progessBar <"%~f0" call :main
- How does the Windows Command Interpreter (CMD.EXE) parse scripts?
- ANSI sequences
[[[Edit:此答案限制为1 bar /秒,但在所有版本的7以上的Windows版本中为FORFILES
。(在某些FORFILES
开关上不受支持。 )
/NOBREAK
,将光标带回家! DosTips还显示可以通过管道TIMEOUT
消除输出(通常TIMEOUT
不支持管道,因此使用CON
。)但是,(几乎)不可能删除顶部的倒计时。 EDIT:为“带有可变步长的栏”修改的代码”
|
TIMEOUT
有关“上一行”的方法的详细信息,请参见
SET /P
NOTE:在所有Windows版本使用新控制台的Windows 10除外]中,将光标向上移动一行的方法都适用。您需要在cmd.exe窗口控制台中启用“传统模式”才能使此方法起作用...