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

[特效代码] 做了个类似进度表的批处理,不知能否再简化?

做了个类似进度表的批处理;但要产生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
复制代码

11# liaobiaoxing


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

TOP

CPU占用率那是相当的高啊。。

TOP

建议楼主搜索下进度条仔细看看那些贴子会对你有很大帮助和启发的。。。
***共同提高***

TOP

8# zm900612 的方法不错!嘿嘿

TOP

如果要将延时的效果细分,可以用
  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
复制代码

TOP

ping -n 2 的速度也很慢,完全不是和3个ping -n 1 一个级别,如果ping -n 2 的速度是0.20 那么3个ping -n 1 的速度是0.13

TOP

ping的第一次反馈最快,约0.1秒,往后差不多都是0.3秒,所以弄个/n 2应该差不多吧

TOP

那完全可以 ping -n 2 嘛。。

TOP

  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了!

TOP

三个ping /n 1 127.1 >nul 和 ping /n 3 127.1 >nul 的效果不一样的哦,ping /n 3 127.1 >nul 的速度太慢,三个ping /n 1 127.1 >nul 速度刚好,不知到你们测试过没?

TOP

楼主创意不错,提几点建议:
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

TOP

返回列表