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

[其他] [已解决]批处理怎么搞一个进度条,思路?

那个格子怎么一格格这样递进的,我看别人的进度条代码看得好晕。

本帖最后由 pcl_test 于 2015-5-2 23:53 编辑

原理就是字符叠加或递减
两个简单的例子
  1. @echo off
  2. for /l %%a in (1 1 20) do (
  3. ping -n 1 0 >nul
  4. set /p=▉<nul
  5. )
  6. pause
复制代码
  1. @echo off & setlocal enabledelayedexpansion
  2. for /l %%a in (1 1 20) do (
  3. set s=!s!▉
  4. echo !s!
  5. ping -n 1 0 >nul
  6. cls
  7. )
  8. pause
复制代码
再来个稍有难度的例子
  1. @echo off &setlocal enabledelayedexpansion
  2. for /l %%a in (1 1 55) do (
  3. set a========================================================
  4. set a=!a:~%%a!
  5. set b=!b!^>
  6. set /p=!b!!a!<nul
  7. ping -n 1 0 >nul
  8. cls
  9. )
  10. pause
复制代码
1

评分人数

TOP

本帖最后由 CrLf 于 2015-5-3 16:39 编辑

不用 cls 可避免闪屏,有两种思路:
1、用特殊字符退行技巧
2、输出一个长度为屏幕范围的变量,确保每次刷一屏

来个比较平滑的进度条,进度就简单用标题搞定了,这样就不会有累赘的代码,反正知道了原理其实都是一回事
  1. @echo off & setlocal enabledelayedexpansion
  2. set "Status=█▉▊▋▌▍▎▏"
  3. for /f "delims=d" %%a in ('cmd /u /c echo 損') do set CR=%%a
  4. for /f "delims=h" %%a in ('cmd /u /c echo 栈') do set BS=%%a
  5. for /f "delims=i" %%a in ('cmd /u /c echo 椉') do set HT=%%a
  6. echo ┌─────────────────────────┐
  7. echo │                         │
  8. echo └─────────────────────────┘
  9. set BS*10=%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%
  10. (
  11. set /p"=@!CR!%HT%%BS%%BS*10%%BS*10%!CR!│"
  12. title 进度   0.00 %%
  13. for /l %%a in (1 1 25) do (
  14. for /l %%a in (1 1 8) do (
  15. ping /n 1 127.0.0.1 >nul
  16. ping /n 1 127.0.0.1 >nul
  17. set /a "n+=1,num=10000*n/25/8,num1=num/100,num2=num%%100+100"
  18. set "num=   !num1!.!num2:~-2!"
  19. title 进度 !num:~-6! %%
  20. set /p=!Status:~-%%a,1!%BS%
  21. )
  22. set /p=!Status:~0,1!
  23. )
  24. )<nul
  25. echo;
  26. echo;
  27. echo The End~
  28. pause>nul & exit /b
复制代码
退行的原理已经找不到出处了,有兴趣就参考 batman 的帖子吧
http://www.bathome.net/viewthread.php?tid=11266
获取特殊字符的办法来自 plp626 的世纪发明:
http://www.bathome.net/viewthread.php?tid=12347
1

评分人数

TOP

回复 3# CrLf


   ~~有点深奥,看得晕,先存起来了,等到能理解的时候再看看。

TOP

仿dism纯等号进度条
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. color 0f
  4. for /l %%l in (1 1 50) do (set "di==!di! !")
  5. for /l %%l in (1 1 72) do (set "tg= !tg!")
  6. echo Dism部署映像服务和管理工具
  7. echo 版本: 16.8.7600
  8. echo,
  9. echo 正在部署Windows TEN
  10. for /l %%j in (1 1 50) do (
  11. set /p =!tg!<nul
  12. set /a k=%%j+50
  13. set /a per=%%j*2
  14. set per=  !per!.0
  15. set per=!per:~-4!
  16. if "!per!"=="00.0" (set per=100.0)
  17. set /a fk=k-25
  18. for /f "tokens=1,2" %%a in ("!k! !fk!") do (set /p =[!di:~-%%a,25!!per!%%!di:~-%%b,25!])<nul
  19. for /l %%l in (1 1 300) do (set /p =<nul)
  20. )
  21. pause>nul
复制代码
1

评分人数

TOP

返回列表