Board logo

标题: [特效代码] 做了个类似进度表的批处理,不知能否再简化? [打印本页]

作者: yue    时间: 2011-5-27 19:42     标题: 做了个类似进度表的批处理,不知能否再简化?

做了个类似进度表的批处理;但要产生run.bat的临时文件,不知道有什么更好的办法,使程序更加简化些?
  1. @echo off
  2. mode con: cols=44 lines=3&color 3f
  3. set ax=22
  4. set disl=                   ○◎●                   ●◎○                   
  5. :dis1
  6. echo set dod=%%disl:~%ax%,19%%>%temp%\run.bat
  7. call %temp%\run.bat
  8. cls&echo.&echo  ∣%dod%∣
  9. ping -n 1 127.1 >nul
  10. ping -n 1 127.1 >nul
  11. ping -n 1 127.1 >nul
  12.   if %ax%==0 set /a ax+=22&goto dis2
  13. set /a ax-=1&goto dis1
  14. :dis2
  15. echo set dod=%%disl:~%ax%,19%%>%temp%\run.bat
  16. call %temp%\run.bat
  17. cls&echo.&echo  ∣%dod%∣
  18. ping -n 1 127.1 >nul
  19. ping -n 1 127.1 >nul
  20. ping -n 1 127.1 >nul
  21.   if %ax%==44 set /a ax-=22&goto dis1
  22. set /a ax+=1&goto dis2
复制代码

作者: CrLf    时间: 2011-5-27 20:09

楼主创意不错,提几点建议:
1、三个ping /n 1 127.1 >nul并列是不是显得太不雅了?建议改成ping /n 3 127.1 >nul,当然也可以用别的命令代替,比如net user>nul,只需要它来拖时间就行了,并不是真的要用这些命令做什么。
2、call的部分完全可以用for替代,就算只用call命令也可以调用标签,而无需临时文件

楼主可能还没掌握变量延迟,建议参考旧帖子:
《批处理变量延迟详解》和《【教程汇总】批处理中的变量延迟扩展、变量嵌套》
http://bbs.bathome.net/viewthrea ... 4%C1%BF%D1%D3%B3%D9
http://bbs.bathome.net/viewthrea ... 4%C1%BF%D1%D3%B3%D9
作者: yue    时间: 2011-5-27 20:26

三个ping /n 1 127.1 >nul 和 ping /n 3 127.1 >nul 的效果不一样的哦,ping /n 3 127.1 >nul 的速度太慢,三个ping /n 1 127.1 >nul 速度刚好,不知到你们测试过没?
作者: yue    时间: 2011-5-27 20:35

  1. @echo off
  2. mode con: cols=44 lines=3&color 3f
  3. set ax=22
  4. set disl=                   ○◎●                   ●◎○                   
  5. :dis1
  6. call set dod=%%disl:~%ax%,19%%
  7. cls&echo.&echo  ∣%dod%∣
  8. ping -n 1 127.1 >nul
  9. ping -n 1 127.1 >nul
  10. ping -n 1 127.1 >nul
  11.   if %ax%==0 set /a ax+=22&goto dis2
  12. set /a ax-=1&goto dis1
  13. :dis2
  14. call set dod=%%disl:~%ax%,19%%
  15. cls&echo.&echo  ∣%dod%∣
  16. ping -n 1 127.1 >nul
  17. ping -n 1 127.1 >nul
  18. ping -n 1 127.1 >nul
  19.   if %ax%==44 set /a ax-=22&goto dis1
  20. set /a ax+=1&goto dis2
复制代码
呵呵,原来这样就ok了!
作者: caruko    时间: 2011-5-27 20:37

那完全可以 ping -n 2 嘛。。
作者: CrLf    时间: 2011-5-27 20:38

ping的第一次反馈最快,约0.1秒,往后差不多都是0.3秒,所以弄个/n 2应该差不多吧
作者: yue    时间: 2011-5-27 21:10

ping -n 2 的速度也很慢,完全不是和3个ping -n 1 一个级别,如果ping -n 2 的速度是0.20 那么3个ping -n 1 的速度是0.13
作者: CrLf    时间: 2011-5-27 21:40

如果要将延时的效果细分,可以用
  1. for /l %%a in (1 1 500) do cd.
复制代码
或者
  1. for /l %%a in (1 1 1000) do rem 延时
复制代码
诸如此类没有回显的命令(也可以用普通命令再屏蔽回显)
不过在每台机子上效果可能不大相同。
也可以在for循环中不断判断时间过了多久,但是这些方法都要以系统资源为代价,ping /n %n% 127.1 >nul只是一个在简洁、低耗、准确、稳定的几项中取得一个动态平衡的延时方法,我们经常用它只是因为它“性价比”比别的方法高。
如果楼主非要用ping /n 1 127.1 >nul,建议用上for /l进行简化:
  1. for /l %%a in (1 1 3) do ping /n 1 127.1 >nul
复制代码

作者: yue    时间: 2011-5-27 22:04

8# zm900612 的方法不错!嘿嘿
作者: batman    时间: 2011-5-27 22:11

建议楼主搜索下进度条仔细看看那些贴子会对你有很大帮助和启发的。。。
作者: liaobiaoxing    时间: 2011-5-28 11:24

CPU占用率那是相当的高啊。。
作者: CrLf    时间: 2011-5-28 12:11

11# liaobiaoxing


这是大部分批处理特效的弊端




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