找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27391|回复: 4

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

[复制链接]
发表于 2015-5-2 21:44:21 | 显示全部楼层 |阅读模式
那个格子怎么一格格这样递进的,我看别人的进度条代码看得好晕。
发表于 2015-5-2 23:49:11 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
尘丶 + 1 乐于助人

查看全部评分

发表于 2015-5-3 02:49:34 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
尘丶 + 1 乐于助人

查看全部评分

 楼主| 发表于 2015-5-3 20:18:30 | 显示全部楼层
回复 3# CrLf


   ~~有点深奥,看得晕,先存起来了,等到能理解的时候再看看。
发表于 2016-3-28 13:21:36 | 显示全部楼层
仿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技术 +1 收起 理由
codegay + 1 1

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 09:14 , Processed in 0.021304 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表