Board logo

标题: [游戏娱乐] 批处理进度条 [打印本页]

作者: jinzeyu    时间: 2011-4-5 16:04     标题: 批处理进度条

本帖最后由 jinzeyu 于 2012-1-5 16:56 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. title 进度条 by:金则宇 2011年4月5日
  3. mode con lines=7 cols=55
  4. set z=0
  5. SET ge=0
  6. for /l %%i in (1,1,25) do (
  7.   set "a%%i=  "
  8.   set "c=!c!▉"
  9.   set "d=!d! "
  10. )
  11. :1
  12. set /a z+=4
  13. for /l %%i in (1,1,3) do ping /n 1 127.1>nul
  14. set /a ge+=1
  15. set "a%ge%=▉"
  16. set jdt=
  17. for /l %%i in (1,1,25) do set "jdt=!jdt!!a%%i!"
  18. cls
  19. echo ┏━━━━━━━━━━━━━━━━━━━━━━━━━┓
  20. echo ┃%jdt%┃
  21. echo ┗━━━━━━━━━━━━━━━━━━━━━━━━━┛
  22. echo %d:~1%%z%﹪
  23. if "%jdt%"=="%c%" echo OK^! &pause >nul & exit
  24. goto 1
复制代码

作者: vsbat    时间: 2011-4-5 16:19

不错 支持个
作者: jinzeyu    时间: 2011-4-5 16:20

终于有人回帖了 内牛满面
作者: pdp320921    时间: 2011-4-5 17:58

不错,学习了~
作者: jinzeyu    时间: 2011-4-6 17:05

顶一下 嘿嘿
作者: wc726842270    时间: 2011-4-7 10:42

用一下RANDOM会更好,至于怎么用——可以说用法很多。最简单的PING /N 和它的结合
PS:不管怎么说,先恭喜LZ吧,进行了一次很能好的尝试。
作者: jinzeyu    时间: 2011-4-7 17:39

谢谢了饿...
作者: jinzeyu    时间: 2011-4-7 17:45

还有 PING /N 怎么和 random组合
作者: 377961686    时间: 2011-4-13 08:57

高手 佩服 学习学习
作者: jay_16    时间: 2011-4-13 12:59

效果很好,提点建议吧,可以让用户自定义设置进度条速度及显示信息。最好把这个函数做成子函数,随用随call.
作者: jay_16    时间: 2011-4-13 13:07

不行呀,我发现它太闪了,而且也不能做成子函数,因为它cls了。
我写的
  1. @echo off
  2. mode con cols=55 lines=25
  3. call :ProcessBar 1 ShowInformation
  4. pause
  5. exit
  6. rem p:间隔 i:进度百分比
  7. :ProcessBar
  8. set p=%1
  9. set info=%2
  10. echo     ┏━━━━━━━━━━━━━━━━━━━━┓
  11. set/p=     ▉<nul
  12. for /l %%i in (1,1,20) do set/p=▉<nul&ping /n %p% 127.1>nul                                       
  13. echo.                       %info%         
  14. echo     ┗━━━━━━━━━━━━━━━━━━━━┛
  15. goto :eof
复制代码

作者: batman    时间: 2011-4-13 14:50

11# jay_16
修改下楼上的代码(加入多行回退):
  1. @echo off&setlocal enabledelayedexpansion
  2. mode con cols=55 lines=25
  3. set "tab= "&rem 请将此处空格换成实际的制表符
  4. call :ProcessBar 1 ShowInformation
  5. pause>nul
  6. exit
  7. rem p:间隔 i:进度百分比
  8. :ProcessBar
  9. set p=%1
  10. set info=%2
  11. for /l %%a in (1,1,32) do set "k=!k!"
  12. echo     ┏━━━━━━━━━━━━━━━━━━━━┓
  13. echo.
  14. echo     ┗━━━━━━━━━━━━━━━━━━━━┛
  15. echo.                       %info%
  16. echo %tab%%k% 2>nul&set /p= <nul
  17. echo.&set /p=     ▉<nul
  18. for /l %%i in (1,1,20) do set/p=▉<nul&ping /n %p% 127.1>nul                                             
复制代码

作者: jinzeyu    时间: 2011-4-13 19:09

不行啊 lss下面的框不显示 ls下面的框在进度条上面 = =
作者: batman    时间: 2011-4-14 00:15

不行啊 lss下面的框不显示 ls下面的框在进度条上面 = =
jinzeyu 发表于 2011-4-13 19:09

你注意到第一个rem的内容不?论坛处理不了制表符(tab)的,所以复制代码后要将tab=后面的空格替换为实际的制表符(tab)。。。
作者: jay_16    时间: 2011-4-14 09:24

14# batman

效果不是很好,你把它弄成现成吧。
作者: jay_16    时间: 2011-4-14 13:26

12# batman
效果很好。刚开始理解错了。呵呵。
作者: jay_16    时间: 2011-4-15 00:18

12# batman


怎么在回退后再返回回退前的那行?要不后面的输出都把进度条盖住了。我试了echo.你看一下call两次进度条的效果就明白,求你帮忙解码一下!呵呵,谢谢
作者: batman    时间: 2011-4-15 01:06

echo,就行。。。
作者: jay_16    时间: 2011-4-15 07:46

18# batman
  1. echo off&setlocal enabledelayedexpansion
  2. mode con cols=55 lines=25
  3. set "tab= "&rem 请将此处空格换成实际的制表符
  4. pause
  5. call :ProcessBar 1 ShowInformation
  6. call :ProcessBar 1 ShowInformation
  7. echo. 你好
  8. echo. 你好
  9. echo. 你好
  10. echo. 你好echo. 你好
  11. echo. 你好
  12. pause>nul
  13. exit
  14. rem p:间隔 i:进度百分比
  15. :ProcessBar
  16. set p=%1
  17. set info=%2
  18. rem 32=倒退3行*10+2
  19. for /l %%a in (1,1,32) do set "k=!k!"
  20. echo     ┏━━━━━━━━━━━━━━━━━━━━┓
  21. echo.
  22. echo     ┗━━━━━━━━━━━━━━━━━━━━┛
  23. echo.                       %info%
  24. rem echo %tab%%k% 2>nul
  25. rem 2>nul屏蔽错误信息      
  26. 2>nul echo %tab%%k%
  27. echo.&set /p=     ▉<nul
  28. for /l %%i in (1,1,20) do set/p=▉<nul&ping /n %p% 127.1>nul
  29. echo.
  30. echo.
  31. echo,
  32. echo.
  33. goto :eof
复制代码
上面是我试验的程序,输出两个进度条,再在进度条下面输出一些字。可是效果很不如意:


作者: batman    时间: 2011-4-15 08:43

第二次call前要把k变量清空,不然回退的是6行。。。
作者: jay_16    时间: 2011-4-15 11:49

学到很多,理解深了很多....
作者: CrLf    时间: 2011-4-15 13:00

可能是系统不一样吧,我机子上reg query hkcu\environment /v temp的结果并未出现tab符...
作者: jinzeyu    时间: 2011-4-15 15:36

batman的好像没有左右两边的框..
作者: jay_16    时间: 2011-4-17 13:16

20# batman
  1. for /l %%i in (1,1,20) do set/p=▉<nul&ping /n %p% 127.1>nul
复制代码
请问一下,这个同行输出▉,可以跳转其他行后再返回此行接着同行输出吗?不是从行首开始,而是接着这行其他内容后输出!?
作者: batman    时间: 2011-4-17 18:00

本帖最后由 batman 于 2011-4-17 18:42 编辑

这样子可以不(注意替换tab):
  1. @echo off&setlocal enabledelayedexpansion
  2. set "tab= "
  3. for /l %%a in (1,1,22) do (
  4.     set "t=!t!"
  5.     if %%a leq 20 set "k=!k!  "
  6. )
  7. for /l %%a in (1,1,80) do set "tg=!tg! "
  8. echo,&echo     ┌────────────────────┐
  9. echo,&echo     └────────────────────┘
  10. echo %tab%%t% 2>nul&set /p=     │<nul
  11. for /l %%a in (1,1,20) do (
  12.     set /a "a=(20-%%a)*2","b=(22-%%a)*6+4",c=%%a00/20
  13.     set "c=  !c!"&set "c=!c:~-3!"
  14.     for %%a in (!a!) do (
  15.         set "str=■!k:~,%%a!│!c!%%"
  16.         set /p=!str!<nul
  17.         for /l %%b in (1,1,500) do echo>nul
  18.         if %%a neq 0 for %%a in (!b!) do set /p=!tg:~,%%a!<nul
  19.     )
  20. )
  21. pause>nul
复制代码

作者: batman    时间: 2011-4-17 18:38

本帖最后由 batman 于 2011-4-17 18:40 编辑

要不就只能这样:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "tab= "
  3. for /l %%a in (1,1,22) do set "t=!t!"
  4. for /l %%a in (1,1,80) do set "tg=!tg! "
  5. echo,&echo     ┌───────────────────┐
  6. echo,&echo     └───────────────────┘
  7. for /l %%a in (1,1,20) do (
  8.     echo %tab%%t% 2>nul&set /p=      <nul
  9.     set /a a=%%a00/20
  10.     set "a=  !a!"&set "a=!a:~-3!"
  11.     for /l %%b in (1,1,%%a) do set /p=■<nul
  12.     for /l %%b in (1,1,1000) do echo>nul
  13.     if %%a neq 20 set /p=%tg%<nul
  14.     echo,&echo,&set /p=                      !a!%%<nul
  15.     for /l %%b in (1,1,1000) do echo>nul
  16.     if %%a neq 20 set /p=%tg%<nul
  17. )
  18. pause>nul
复制代码

作者: jay_16    时间: 2011-4-18 13:56

27# batman


谢谢。原来我的想法是不现实的。呵呵。非常感谢
作者: batman    时间: 2011-4-18 16:41

思维定向,可以做到的(注意替换tab为实际的制表符):
  1. @echo off&setlocal enabledelayedexpansion
  2. set "tab= "
  3. for /l %%a in (1,1,22) do set "t=!t!"
  4. for /l %%a in (1,1,80) do set "tg=!tg! "
  5. echo,&echo     ┌────────────────────┐
  6. echo                                               │
  7. echo     └────────────────────┘
  8. for /l %%a in (1,1,20) do (
  9.     echo %tab%%t% 2>nul&set /p=     │<nul
  10.     set /a a=%%a00/20
  11.     set "a=  !a!"&set "a=!a:~-3!"
  12.     for /l %%b in (1,1,%%a) do set /p=■<nul
  13.     for /l %%b in (1,1,500) do echo>nul
  14.     echo,&echo,&set /p=                      !a!%%<nul
  15.     for /l %%b in (1,1,200) do echo>nul
  16.     if %%a neq 20 set /p=%tg%<nul
  17. )
  18. pause>nul
复制代码

作者: 冷玉公子    时间: 2011-4-19 20:14

好看 就是看不懂
作者: cxypy    时间: 2011-4-24 13:36

不错,学习了~
作者: cjiabing    时间: 2011-12-24 22:36

这里人多,补一个进度条,可以左右移动的哦!~
代码不是我的,我只是修改成这样了!
  1. @echo off&setlocal enabledelayedexpansion
  2. ::可以通过修改两个FOR以及str的空格数量来控制图标往前或者往后移动。
  3. ::退格键的意义就是cls的意义,只不过它不是全屏清理,而是往前清理。
  4. echo,
  5. echo.
  6. set "str=                                 《《"
  7. for /l %%a in (1,1,50) do set "t=!t! "
  8. echo.&set /p= <nul
  9. echo.弹簧、钟摆、火车
  10. :lp
  11. for /l %%a in (1,1,20) do (
  12.      set /a a=6*%%a
  13.      for %%b in (!a!) do set "t1=!t:~%%b!"
  14.      set /p=!str:~%%a!<nul
  15.      for /l %%b in (1,1,2000) do echo>nul
  16.      set /p=!t1!<nul
  17. )
  18. goto lp
复制代码

作者: crazyforus    时间: 2013-4-22 22:37

很好,很强大。
作者: 狱渊    时间: 2013-4-28 19:35

回复 1# jinzeyu


    谢谢了 哦  呵呵   刚好要用呢
作者: bruce61    时间: 2016-9-28 09:23

怎样运用到FTP下载上面呀?请大神指教!
作者: hlzj88    时间: 2016-11-19 09:23

凑热闹,加一个
  1. @echo off&&setlocal enabledelayedexpansion
  2. set aa=▉
  3. set bb=
  4. set p=0
  5. :ff
  6. echo.
  7. set bb=!bb!!aa!
  8. set /a p+=4
  9. echo !bb!!p!%%
  10. if !p! equ 100 goto ks
  11. ping /n 2 127.1>nul
  12. cls
  13. goto ff
  14. :ks
  15. echo 在这里写你的p&pause>nul
复制代码

作者: 1797128183    时间: 2021-9-11 00:05

牛蛙牛蛙!支持支持!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2