[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[特效代码] 递减进度条.BAT (疑惑、优化、讨论)

  1. @echo off &mode con cols=90 lines=5 &color 0e
  2. :da
  3. set a=%a%■
  4. set x=%x%─
  5. set y=%y%─
  6. set/a b=%b%+1,c=44,d=100
  7. if /i "%b%"=="%c%" goto run
  8. set /a f=%c%*%d%
  9. goto da
  10. rem 上面这段基本是多余的,其中%a% %x% %y% 完全可以用SET (A X Y) =(■N个数)代替,%C%就是%A%的个数,但为了后续B C D E变量的需要所以改写了代码。
  11. :run
  12. cls
  13. set a=%a:~0,-1%
  14. set/a e=%e%+1,f-=%d%
  15. set /a g=%f%/%c%
  16. @echo  剩余进度 %g%%%  %time:~3,-3% ..... &TITLE 剩余进度 %g%%%  %time:~3,-3% ...
  17. @echo ┌%x:~0,-2%┐
  18. @echo. %a%
  19. @echo └%y:~0,-2%┘
  20. if %e% geq %c% goto run2
  21. ping /n 2 127.1 >nul & goto run
  22. :run2
  23. cls
  24. echo  这里写下你需要的运行代码。。。
  25. pause>nul
复制代码
如上代码!!!我自己一时兴起写了个递减进度条的BAT 脚本。遇到一些运算困惑需要大牛们优化解答。
如代码中 A 标签是设置窗口中 A X Y 显示的宽度和一些在:RUN标签中运算里需要的变量。
先代码中不足的是,窗口只能注定延迟%C%的变量秒数,不能自定义任意延迟时间,虽然PING /N (N数)可以设定预期延迟。
但在我看来效果不够理想,因为我想保持窗口能随时保持%time:~3,-3%每秒刷新。
如果脚本显示窗口设定的是33或任意个递减数,而设定的延迟是10秒或10分钟,
那么脚本该如何按照比例递减进度条(递进也是一个样)就是按照延迟比例来递减或递进,
就拿33个显示条延迟10来比喻吧!时间延迟到5秒的时候进度条递减了16个或17个,该如何写他的运算方式?
求:各路大牛和管理,给个意见、讨论、看法、或范本。

  1. write-progress
复制代码
又研究花里胡哨的,重复造轮子,剩下时间还不如深入研究powershell,或者喝杯☕️,做更多有意义的作品。

TOP

没人愿意解答吗?
困惑就是一个运算比例问题!
特定的显示条,按照延迟时间的比例,相应减少。
我已经写出了按照比例减少显示数目和比例的条目,
现在就卡在延迟比例的运算上!
而且还要求窗口能每秒刷新实时秒数时间。
我自己已经有了一些初步思路,曾经想过用CALL 调用显示。
然后再通过一些复合运算,得出相应的显示效果!
但最终卡在,判断时间和显示个数的比例上。
最重要的还是,窗口要每秒实时刷新,而进度条的比例要正常显示!

TOP

回复 2# ivor


    进度条就是个鸡肋,严重影响效率
QQ 33892006

TOP

本帖最后由 flashercs 于 2018-12-29 22:40 编辑

进度条长度/进度条递减step=总共消耗时间/递减interval时间
length/step=time/interval
所以step=length*interval/time
这里interval是1秒,因为每秒都显示时间;
所以step=length/time
若 length=200个字符,time=40s
那么step=5个字符.
取整数

TOP

回复 4# yhcfsr


我知道是鸡肋,那脚本是我写着玩的,目前来说暂时没有任何实际应用的案例!
我也知道那是很鸡肋的做法,但有时候我们写代码需要的是一种视野和思路!
但其实我想讨论的核心是,BAT脚本比例的换算比,该如何表达!
就如同:10除以3是永远除不尽的,但该怎么样用一种BAT语法表达出合理的,四舍五入的运算方式。
往往我在写代码的时候会套用很多不同的运算、方式、表达、思路。
我在遇到困境不是用一句鸡肋去回避。而是想知道这种语法能支撑起多大的运算范围!
我们在写代码的时候,在不依靠第三方工具和语言的情况下,该如何尽善的去发现出语法的限位和BUG!
有点钻牛角尖的意思吧,但终归是讨论,能得到解答固然是最好!
得不到解答其实也无害。但在我看来不是少了一个脚本问题,而是少了一个视野宽度,思维界限。
重申:这是讨论帖!

TOP

  1. @echo off
  2. mode con cols=113 lines=15 &color 9f
  3. :starthome
  4. cls
  5. set a=^set /p=■%b%^<nul^&ping/n 0 127.1^>nul^&
  6. echo.
  7. echo 程序正在初始化. . .
  8. echo.
  9. echo ┌──────────────────────────────────────┐
  10. set/p=  <nul&%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%
  11. echo 100%%
  12. echo └──────────────────────────────────────┘
  13. set b=
  14. set a=■
  15. set /a z=100
  16. pause
  17. :start
  18. cls
  19. set a=%a%■■
  20. set /a b+=5
  21. set /a z-=5
  22. echo.
  23. @echo 剩余进度 %z%%%
  24. @echo ┌──────────────────────────────────────────┐
  25. @echo %a% %b%%%
  26. @echo └──────────────────────────────────────────┘
  27. if %b% geq 100 goto num2
  28. ping /n 0 127.1 >nul
  29. set /a sum =5
  30. goto start
  31. :_exit
  32. set /a sum-=1
  33. set/p=%sum% 秒后退出! <nul
  34. echo.
  35. if %sum% EQU 0 exit
  36. ping /n 2 127.1 >nul
  37. goto _exit
  38. rem 冲到一半再缩,冲到一半再加
  39. :num2
  40. setlocal EnableDelayedexpansion
  41. set sum=
  42. Set z=
  43. set a=■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  44. set /a z1=52
  45. set /a z2=52
  46. :start2
  47. cls
  48. set sum52=
  49. set /a z2=52
  50. set /a sum+=1
  51. set /a z1-=1
  52. set b=!a:~%sum%!
  53. set c=!a:~-%sum%!
  54. call :_color
  55. echo.
  56. echo.
  57. echo 剩余进度:%z1%%%
  58. echo ┌──────────────────────────────────────────────────────┐
  59. echo %b% %z1%%%
  60. echo └──────────────────────────────────────────────────────┘
  61. echo 当前颜色代码: COLOR 0!numca!
  62. echo.
  63. echo.
  64. echo 当前进度:%sum%%%
  65. echo ┌──────────────────────────────────────────────────────┐
  66. echo %c% %sum%%%
  67. echo └──────────────────────────────────────────────────────┘
  68. echo 当前颜色代码: COLOR 0!numca!
  69. if %sum% geq 52 call :sum52
  70. ping /n 0 127.1 >nul
  71. goto start2
  72. :sum52
  73. cls
  74. set sum=
  75. set /a z1=52
  76. set /a sum52+=1
  77. set /a z2-=1
  78. set c=!a:~%sum52%!
  79. set b=!a:~-%sum52%!
  80. call :_color
  81. echo.
  82. echo.
  83. echo 当前进度:%sum52%%%
  84. echo ┌──────────────────────────────────────────────────────┐
  85. echo %b% %sum52%%%
  86. echo └──────────────────────────────────────────────────────┘
  87. echo 当前颜色代码: COLOR 0!numca!
  88. echo.
  89. echo.
  90. echo 剩余进度:%z2%%%
  91. echo ┌──────────────────────────────────────────────────────┐
  92. echo %c% %z2%%%
  93. echo └──────────────────────────────────────────────────────┘
  94. echo 当前颜色代码: COLOR 0!numca!
  95. if %sum52% geq 52 call :start2
  96. ping /n 0 127.1 >nul
  97. cls
  98. goto sum52
  99. :_color
  100. set _color=1234567890ABCDEF
  101. set /a _random=%random%%%16
  102. set numca=!_color:~%_random%,1!
  103. color 0!numca!
  104. goto :eof
复制代码
来源于网络

TOP

淡定淡定,我以前也是玩这个开始学的,没什么人说我反而都是夸的。
主要还是时代的关系,那时候精批处理的人不多。

现在你学批处理就有些不太合时宜,坛友的劝退对你是有好处的,批处理性价比低,换了吧。

TOP

本帖最后由 523066680 于 2019-1-1 20:59 编辑

我就喜欢花里胡哨的东西








今年没什么新花样,过年再折腾一波,好在没什么人阻止我。

TOP

返回列表