Progress Bar Dos

问题描述 投票:4回答:4

我是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%
)
for-loop batch-file cmd echo
4个回答
1
投票

历史记录:

  1. ANSI序列被添加为Redstone Update的一部分(然后被删除并再次添加,提到了here),因此脚本仅在Windows 10上有效
  2. 已删除FORFILES,现在快了250倍
  3. [C0的功能版本
  4. 现在按下Ctrl-C时脚本被中止立即
  5. 根据@Joseph的请求进行编辑

结合使用@Stephan's AnswerANSI 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开关上不受支持。 )

Functional CR within batch script,@ Aacini发现将compatible重定向到/NOBREAK,将光标带回家! DosTips还显示可以通过管道TIMEOUT消除输出(通常TIMEOUT不支持管道,因此使用CON。)但是,(几乎)不可能删除顶部的倒计时。

@jeb


2
投票
这在这里有效(非常快!):

EDIT:为“带有可变步长的栏”修改的代码”

|
TIMEOUT

有关“上一行”的方法的详细信息,请参见SET /P

NOTE:在所有Windows版本使用新控制台的Windows 10除外]中,将光标向上移动一行的方法都适用。您需要在cmd.exe窗口控制台中启用“传统模式”才能使此方法起作用...


1
投票
[对HackingAddict1337的代码进行了一些细微的更改,可能有一个固定的(可选择的)条形总长度:

0
投票
如果需要,您可以使用此应用程序轻松打印ASCII代码:
© www.soinside.com 2019 - 2024. All rights reserved.