标题: [其他] [已解决]批处理怎么搞一个进度条,思路? [打印本页]
作者: 尘丶 时间: 2015-5-2 21:44 标题: [已解决]批处理怎么搞一个进度条,思路?
那个格子怎么一格格这样递进的,我看别人的进度条代码看得好晕。
作者: pcl_test 时间: 2015-5-2 23:49
本帖最后由 pcl_test 于 2015-5-2 23:53 编辑
原理就是字符叠加或递减
两个简单的例子- @echo off
- for /l %%a in (1 1 20) do (
- ping -n 1 0 >nul
- set /p=▉<nul
- )
- pause
复制代码
- @echo off & setlocal enabledelayedexpansion
- for /l %%a in (1 1 20) do (
- set s=!s!▉
- echo !s!
- ping -n 1 0 >nul
- cls
- )
- pause
复制代码
再来个稍有难度的例子- @echo off &setlocal enabledelayedexpansion
- for /l %%a in (1 1 55) do (
- set a========================================================
- set a=!a:~%%a!
- set b=!b!^>
- set /p=!b!!a!<nul
- ping -n 1 0 >nul
- cls
- )
- pause
复制代码
作者: CrLf 时间: 2015-5-3 02:49
本帖最后由 CrLf 于 2015-5-3 16:39 编辑
不用 cls 可避免闪屏,有两种思路:
1、用特殊字符退行技巧
2、输出一个长度为屏幕范围的变量,确保每次刷一屏
来个比较平滑的进度条,进度就简单用标题搞定了,这样就不会有累赘的代码,反正知道了原理其实都是一回事- @echo off & setlocal enabledelayedexpansion
-
- set "Status=█▉▊▋▌▍▎▏"
-
- for /f "delims=d" %%a in ('cmd /u /c echo 損') do set CR=%%a
- for /f "delims=h" %%a in ('cmd /u /c echo 栈') do set BS=%%a
- for /f "delims=i" %%a in ('cmd /u /c echo 椉') do set HT=%%a
-
- echo ┌─────────────────────────┐
- echo │ │
- echo └─────────────────────────┘
- set BS*10=%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%
- (
- set /p"=@!CR!%HT%%BS%%BS*10%%BS*10%!CR!│"
-
- title 进度 0.00 %%
-
- for /l %%a in (1 1 25) do (
- for /l %%a in (1 1 8) do (
- ping /n 1 127.0.0.1 >nul
- ping /n 1 127.0.0.1 >nul
-
- set /a "n+=1,num=10000*n/25/8,num1=num/100,num2=num%%100+100"
- set "num= !num1!.!num2:~-2!"
- title 进度 !num:~-6! %%
-
- set /p=!Status:~-%%a,1!%BS%
- )
- set /p=!Status:~0,1!
- )
- )<nul
-
- echo;
- echo;
- echo The End~
-
- pause>nul & exit /b
复制代码
退行的原理已经找不到出处了,有兴趣就参考 batman 的帖子吧
http://www.bathome.net/viewthread.php?tid=11266
获取特殊字符的办法来自 plp626 的世纪发明:
http://www.bathome.net/viewthread.php?tid=12347
作者: 尘丶 时间: 2015-5-3 20:18
回复 3# CrLf
~~有点深奥,看得晕,先存起来了,等到能理解的时候再看看。
作者: happy886rr 时间: 2016-3-28 13:21
仿dism纯等号进度条- @echo off
- setlocal enabledelayedexpansion
- color 0f
- for /l %%l in (1 1 50) do (set "di==!di! !")
- for /l %%l in (1 1 72) do (set "tg= !tg!")
- echo Dism部署映像服务和管理工具
- echo 版本: 16.8.7600
- echo,
- echo 正在部署Windows TEN
- for /l %%j in (1 1 50) do (
- set /p =!tg!<nul
- set /a k=%%j+50
- set /a per=%%j*2
- set per= !per!.0
- set per=!per:~-4!
- if "!per!"=="00.0" (set per=100.0)
- set /a fk=k-25
- for /f "tokens=1,2" %%a in ("!k! !fk!") do (set /p =[!di:~-%%a,25!!per!%%!di:~-%%b,25!])<nul
- for /l %%l in (1 1 300) do (set /p =<nul)
-
- )
- pause>nul
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |