Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
For loop 进度条Dos_For Loop_Batch File_Cmd_Echo - Fatal编程技术网

For loop 进度条Dos

For loop 进度条Dos,for-loop,batch-file,cmd,echo,For Loop,Batch File,Cmd,Echo,我是dos批处理命令的新手,我想实现如图所示的进度条。 首先,您必须初始化流程值并计算其百分比,并且必须使用进度条显示它 您可以对进度条执行Alt+219和Alt+176操作 以下是我到目前为止所做的 echo off cls SetLocal EnableDelayedExpansion set processValueString=200 set a/ processValue=200 set a/ percentage=0 echo Process value: %processValu

我是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序列是作为的一部分添加的,因此它只能在Windows 10中工作+
结合使用和的功能打印ASCII字符

@echo关闭
^
%=------------请勿删除此行--------------=%
Y
%=Y在按下Ctrl-C时中止=%
%=N忽略=%
SETLOCAL EnableDelayedExpansion
::默认值
(左前)=^
%=------------请勿删除此行--------------=%
)
对于/F%%C in('copy/Z“%~f0“nul'),请设置“CR=%%C”

对于/F%%E in('prompt$E^&^,对HackingAddict1337的代码进行一些小的更改,可以固定(可选择)条的总长度:

@echo off
cls
SETLOCAL EnableDelayedExpansion

set /a "processValue=200"
set "bar=0xDB" Character used by progress bar (SUPPORTS HEX)
set "tbd=0xB0"
set "barLength=40"
( set LF=^
%=-----------DO NOT REMOVE THIS LINE. the LF variable is for future use in a function, it's currently useless-----------=%
)
FOR /F %%B in ('FORFILES /P "%~dp0." /M "%~nx0" /C "cmd /c echo(!bar!"') do set "bar=%%B"
FOR /F %%B in ('FORFILES /P "%~dp0." /M "%~nx0" /C "cmd /c echo(!tbd!"') do set "tbd=%%B"
FOR /F %%B in ('copy /Z "%~f0" nul') do set "CR=%%B"
FOR /F %%B in ('prompt $E ^& ^<nul cmd /k') do set "ESC=%%B"
for /l %%N in (0,1,%barLength%) do set "emptybar=!emptybar! "

echo Starting at %time%!LF!
for /l %%N in (0 1 !barLength!) do echo(!LF!%ESC%[2A%ESC%[%%NC%tbd%
for /L %%N in (0 1 %processValue%) do (
  set /a showBar=%%N*barLength/processValue
  set /a percentage=%%N*100/processValue
  echo(Processing: %%N / %processValue% = !percentage!%%!LF!%ESC%[2A%ESC%[!showBar!C%bar%
  ping -4 -n 1 127.0.0.1 >nul 
)
echo !LF!Finished at %time%
pause>nul
ENDLOCAL
  • 进度条的速度是可变的,这意味着每一步的速度不是恒定的。
    这是因为四舍五入。对此我们无能为力,除非我们使
    processValue
    等于
    barLength
    或整数倍
  • 这在这里起作用(非常快!):

    编辑:为“带可变步长的条形图”修改代码

    @echo关闭
    SetLocal EnableDelayedExpansion
    rem定义构成此作业的(7)个步骤中每一个步骤的“数量”
    设置“金额=10 6 2 9 3 7 4”
    设置宽度=60
    设置“off=”
    设置“on=”
    对于/F“tokens=1,2”%%X in('FORFILES/M“%~nx0”/C“cmd/C echo 0xDB 0xB0”'),请执行以下操作(
    对于(1,1,%width%)中的/L%%i,请设置“开=!开!%%X”并设置“关=!关!%%Y”
    )
    rem Get CR、BS和TAB ASCII控制字符:
    对于('copy/Z'%~f0“nul')中的/F%%a,请设置“CR=%%a”
    对于('echo prompt$H^ | cmd')中的/F%%a,请设置“BS=%%a”
    设置“TAB=”
    首先,尝试Windows XP的方法
    对于/F“skip=4 delims=pR tokens=2”%%a in('reg query hkcu\environment/v temp')do set“TAB=%%a”
    那么,更新版本的方法是什么呢
    雷姆http://www.dostips.com/forum/viewtopic.php?f=3&t=1733&p=6840#p6853
    对于/F“tokens=2 delims=0”%%a in('shutdown/?^ | findstr/BC:E'),如果未定义,则执行选项卡集“选项卡=%%a”
    rem字符串在SET/P命令中上升一行
    设置“列表=%TAB%!BS!!BS!!CR!”
    cls
    已处理值的回显百分比
    回音/
    回显%TAB%%off%
    回显%选项卡%百分比:0%%
    回显%TAB%处理:0/%processValue%
    设置/A“processValue=0,summa=0”
    对于(%amounts%)中的%%a,请设置/a processValue+=%a
    对于%%N in(%amounts%)do(
    设置/A“summa+=%%N,百分比=summa*100/processValue,百分比=百分比*宽度/100
    对于(1,1,4)中的%%i,执行设置/P“=!排列!”num
    )
    

    有关“向上一行”方法的详细信息,请参阅


    注意:使用新控制台将光标上移一行的方法适用于除Windows 10之外的所有Windows版本。您需要在cmd.exe窗口控制台中启用“传统模式”,以便此方法工作…

    如果需要,您可以使用此应用程序轻松打印ascii代码:

    下载网址:

    进度条也有很多字符


    语法很简单:

    char [ascii code] [ascii code]
    

    例如:

    char 186 186 201 186
    

    您还可以添加空字符:

    char 186 " " 186
    

    我希望这会有所帮助

    批处理文件不能以图像反射的方式显示图形。它们是纯文本输出。请看一下。这可能不是您想要的,但会让您接近。@KenWhite。我认为您可以执行Alt+219和Alt+176确定。然后继续执行。:-)我想你可以结合使用和的功能来打印ascii字符,我只是不知道如何…这是错误的颜色!但更重要的是,由于OP没有指定操作系统,需要注意的是,ANSI转义序列在你使用的早期版本的Windows中不可用。我的观点是,没有替代品,我相信我能想出一个(如果我够孩子气需要的话)。我的观点是,如果您的解决方案仅限于最新的操作系统版本,并且OP没有使用特定的版本标记,或者在其标题或正文中没有提及,则不清楚您当前的答案是否适用于其他版本。目前,虽然其中一个链接页面确实提到了Windows 10,但您必须滚动以查找我t、 你不应该期望将来的读者会这样。只要在回答中说清楚,或者为早期的操作系统提供一个替代方案。@HackingAddict1337.Good2。你能像图中一样把“%”放在“处理”字上面吗?变量名是不言自明的,所以你可以。只是别忘了把它重定向到stream3
    &3
    (加载条时按下ctrl-c时脚本立即中止)@HackingAddict1337.I put&3 echo(百分之:!百分之!%并在之后运行多行。)this@HackingAddict1337:如果您想将其包含在代码中,则不必客气。然后我将删除我的答案。您的代码最接近我想要的输出。只需进行小的修复。1.您缺少“测量栏”的外观,这应该看起来像ALT+176,这是我认为的代码“echo[%emptybar%]”.2.你还缺少一件很简单的事情,就是百分比,例如:百分比:10%.3.进度条的速度是可变的,这意味着每一步的速度不是恒定的。@Stephan我把东西过度复杂化了,现在我有了一个更快的版本,我将发布that@HackingAddict1337.太好了。注意下面的三个问题。请检查是视频链接。我需要这样的东西。progressbar的数字有时会跳过任何数字,就像普通的应用程序一样,如果互联网速度很快,那么加载的数字会跳过很多数字。你能不能也把16%放在处理字上面?就像我的问题/视频链接中一样。
    char 186 186 201 186
    
    char 186 " " 186