标题: [游戏娱乐] 批处理进度条 [打印本页]
作者: jinzeyu 时间: 2011-4-5 16:04 标题: 批处理进度条
本帖最后由 jinzeyu 于 2012-1-5 16:56 编辑
- @echo off&setlocal enabledelayedexpansion
- title 进度条 by:金则宇 2011年4月5日
- mode con lines=7 cols=55
- set z=0
- SET ge=0
- for /l %%i in (1,1,25) do (
- set "a%%i= "
- set "c=!c!▉"
- set "d=!d! "
- )
- :1
- set /a z+=4
- for /l %%i in (1,1,3) do ping /n 1 127.1>nul
- set /a ge+=1
- set "a%ge%=▉"
- set jdt=
- for /l %%i in (1,1,25) do set "jdt=!jdt!!a%%i!"
- cls
- echo ┏━━━━━━━━━━━━━━━━━━━━━━━━━┓
- echo ┃%jdt%┃
- echo ┗━━━━━━━━━━━━━━━━━━━━━━━━━┛
- echo %d:~1%%z%﹪
- if "%jdt%"=="%c%" echo OK^! &pause >nul & exit
- goto 1
复制代码
作者: vsbat 时间: 2011-4-5 16:19
不错 支持个
作者: jinzeyu 时间: 2011-4-5 16:20
终于有人回帖了 内牛满面
作者: pdp320921 时间: 2011-4-5 17:58
不错,学习了~
作者: jinzeyu 时间: 2011-4-6 17:05
顶一下 嘿嘿
作者: wc726842270 时间: 2011-4-7 10:42
用一下RANDOM会更好,至于怎么用——可以说用法很多。最简单的PING /N 和它的结合
PS:不管怎么说,先恭喜LZ吧,进行了一次很能好的尝试。
作者: jinzeyu 时间: 2011-4-7 17:39
谢谢了饿...
作者: jinzeyu 时间: 2011-4-7 17:45
还有 PING /N 怎么和 random组合
作者: 377961686 时间: 2011-4-13 08:57
高手 佩服 学习学习
作者: jay_16 时间: 2011-4-13 12:59
效果很好,提点建议吧,可以让用户自定义设置进度条速度及显示信息。最好把这个函数做成子函数,随用随call.
作者: jay_16 时间: 2011-4-13 13:07
不行呀,我发现它太闪了,而且也不能做成子函数,因为它cls了。
我写的- @echo off
- mode con cols=55 lines=25
- call :ProcessBar 1 ShowInformation
- pause
- exit
-
- rem p:间隔 i:进度百分比
- :ProcessBar
- set p=%1
- set info=%2
- echo ┏━━━━━━━━━━━━━━━━━━━━┓
- set/p= ▉<nul
- for /l %%i in (1,1,20) do set/p=▉<nul&ping /n %p% 127.1>nul
- echo. %info%
- echo ┗━━━━━━━━━━━━━━━━━━━━┛
- goto :eof
复制代码
作者: batman 时间: 2011-4-13 14:50
11# jay_16
修改下楼上的代码(加入多行回退):- @echo off&setlocal enabledelayedexpansion
- mode con cols=55 lines=25
- set "tab= "&rem 请将此处空格换成实际的制表符
- call :ProcessBar 1 ShowInformation
- pause>nul
- exit
-
- rem p:间隔 i:进度百分比
- :ProcessBar
- set p=%1
- set info=%2
- for /l %%a in (1,1,32) do set "k=!k!"
- echo ┏━━━━━━━━━━━━━━━━━━━━┓
- echo.
- echo ┗━━━━━━━━━━━━━━━━━━━━┛
- echo. %info%
- echo %tab%%k% 2>nul&set /p= <nul
- echo.&set /p= ▉<nul
- for /l %%i in (1,1,20) do set/p=▉<nul&ping /n %p% 127.1>nul
复制代码
作者: jinzeyu 时间: 2011-4-13 19:09
不行啊 lss下面的框不显示 ls下面的框在进度条上面 = =
作者: batman 时间: 2011-4-14 00:15
不行啊 lss下面的框不显示 ls下面的框在进度条上面 = =
jinzeyu 发表于 2011-4-13 19:09
你注意到第一个rem的内容不?论坛处理不了制表符(tab)的,所以复制代码后要将tab=后面的空格替换为实际的制表符(tab)。。。
作者: jay_16 时间: 2011-4-14 09:24
14# batman
效果不是很好,你把它弄成现成吧。
作者: jay_16 时间: 2011-4-14 13:26
12# batman
效果很好。刚开始理解错了。呵呵。
作者: jay_16 时间: 2011-4-15 00:18
12# batman
怎么在回退后再返回回退前的那行?要不后面的输出都把进度条盖住了。我试了echo.你看一下call两次进度条的效果就明白,求你帮忙解码一下!呵呵,谢谢
作者: batman 时间: 2011-4-15 01:06
echo,就行。。。
作者: jay_16 时间: 2011-4-15 07:46
18# batman - echo off&setlocal enabledelayedexpansion
- mode con cols=55 lines=25
- set "tab= "&rem 请将此处空格换成实际的制表符
- pause
- call :ProcessBar 1 ShowInformation
- call :ProcessBar 1 ShowInformation
- echo. 你好
- echo. 你好
- echo. 你好
- echo. 你好echo. 你好
- echo. 你好
- pause>nul
- exit
-
- rem p:间隔 i:进度百分比
- :ProcessBar
- set p=%1
- set info=%2
- rem 32=倒退3行*10+2
- for /l %%a in (1,1,32) do set "k=!k!"
- echo ┏━━━━━━━━━━━━━━━━━━━━┓
- echo.
- echo ┗━━━━━━━━━━━━━━━━━━━━┛
- echo. %info%
- rem echo %tab%%k% 2>nul
- rem 2>nul屏蔽错误信息
- 2>nul echo %tab%%k%
- echo.&set /p= ▉<nul
- for /l %%i in (1,1,20) do set/p=▉<nul&ping /n %p% 127.1>nul
- echo.
- echo.
- echo,
- echo.
- goto :eof
复制代码
上面是我试验的程序,输出两个进度条,再在进度条下面输出一些字。可是效果很不如意:
作者: batman 时间: 2011-4-15 08:43
第二次call前要把k变量清空,不然回退的是6行。。。
作者: jay_16 时间: 2011-4-15 11:49
学到很多,理解深了很多....
作者: CrLf 时间: 2011-4-15 13:00
可能是系统不一样吧,我机子上reg query hkcu\environment /v temp的结果并未出现tab符...
作者: jinzeyu 时间: 2011-4-15 15:36
batman的好像没有左右两边的框..
作者: jay_16 时间: 2011-4-17 13:16
20# batman - for /l %%i in (1,1,20) do set/p=▉<nul&ping /n %p% 127.1>nul
复制代码
请问一下,这个同行输出▉,可以跳转其他行后再返回此行接着同行输出吗?不是从行首开始,而是接着这行其他内容后输出!?
作者: batman 时间: 2011-4-17 18:00
本帖最后由 batman 于 2011-4-17 18:42 编辑
这样子可以不(注意替换tab):- @echo off&setlocal enabledelayedexpansion
- set "tab= "
- for /l %%a in (1,1,22) do (
- set "t=!t!"
- if %%a leq 20 set "k=!k! "
- )
- for /l %%a in (1,1,80) do set "tg=!tg! "
- echo,&echo ┌────────────────────┐
- echo,&echo └────────────────────┘
- echo %tab%%t% 2>nul&set /p= │<nul
- for /l %%a in (1,1,20) do (
- set /a "a=(20-%%a)*2","b=(22-%%a)*6+4",c=%%a00/20
- set "c= !c!"&set "c=!c:~-3!"
- for %%a in (!a!) do (
- set "str=■!k:~,%%a!│!c!%%"
- set /p=!str!<nul
- for /l %%b in (1,1,500) do echo>nul
- if %%a neq 0 for %%a in (!b!) do set /p=!tg:~,%%a!<nul
- )
- )
- pause>nul
复制代码
作者: batman 时间: 2011-4-17 18:38
本帖最后由 batman 于 2011-4-17 18:40 编辑
要不就只能这样:- @echo off&setlocal enabledelayedexpansion
- set "tab= "
- for /l %%a in (1,1,22) do set "t=!t!"
- for /l %%a in (1,1,80) do set "tg=!tg! "
- echo,&echo ┌───────────────────┐
- echo,&echo └───────────────────┘
- for /l %%a in (1,1,20) do (
- echo %tab%%t% 2>nul&set /p= <nul
- set /a a=%%a00/20
- set "a= !a!"&set "a=!a:~-3!"
- for /l %%b in (1,1,%%a) do set /p=■<nul
- for /l %%b in (1,1,1000) do echo>nul
- if %%a neq 20 set /p=%tg%<nul
- echo,&echo,&set /p= !a!%%<nul
- for /l %%b in (1,1,1000) do echo>nul
- if %%a neq 20 set /p=%tg%<nul
- )
- pause>nul
复制代码
作者: jay_16 时间: 2011-4-18 13:56
27# batman
谢谢。原来我的想法是不现实的。呵呵。非常感谢
作者: batman 时间: 2011-4-18 16:41
思维定向,可以做到的(注意替换tab为实际的制表符):- @echo off&setlocal enabledelayedexpansion
- set "tab= "
- for /l %%a in (1,1,22) do set "t=!t!"
- for /l %%a in (1,1,80) do set "tg=!tg! "
- echo,&echo ┌────────────────────┐
- echo │
- echo └────────────────────┘
- for /l %%a in (1,1,20) do (
- echo %tab%%t% 2>nul&set /p= │<nul
- set /a a=%%a00/20
- set "a= !a!"&set "a=!a:~-3!"
- for /l %%b in (1,1,%%a) do set /p=■<nul
- for /l %%b in (1,1,500) do echo>nul
- echo,&echo,&set /p= !a!%%<nul
- for /l %%b in (1,1,200) do echo>nul
- if %%a neq 20 set /p=%tg%<nul
- )
- pause>nul
复制代码
作者: 冷玉公子 时间: 2011-4-19 20:14
好看 就是看不懂
作者: cxypy 时间: 2011-4-24 13:36
不错,学习了~
作者: cjiabing 时间: 2011-12-24 22:36
这里人多,补一个进度条,可以左右移动的哦!~
代码不是我的,我只是修改成这样了!- @echo off&setlocal enabledelayedexpansion
- ::可以通过修改两个FOR以及str的空格数量来控制图标往前或者往后移动。
- ::退格键的意义就是cls的意义,只不过它不是全屏清理,而是往前清理。
- echo,
- echo.
- set "str= 《《"
- for /l %%a in (1,1,50) do set "t=!t! "
- echo.&set /p= <nul
- echo.弹簧、钟摆、火车
- :lp
- for /l %%a in (1,1,20) do (
- set /a a=6*%%a
- for %%b in (!a!) do set "t1=!t:~%%b!"
- set /p=!str:~%%a!<nul
- for /l %%b in (1,1,2000) do echo>nul
- set /p=!t1!<nul
- )
- goto lp
复制代码
作者: crazyforus 时间: 2013-4-22 22:37
很好,很强大。
作者: 狱渊 时间: 2013-4-28 19:35
回复 1# jinzeyu
谢谢了 哦 呵呵 刚好要用呢
作者: bruce61 时间: 2016-9-28 09:23
怎样运用到FTP下载上面呀?请大神指教!
作者: hlzj88 时间: 2016-11-19 09:23
凑热闹,加一个- @echo off&&setlocal enabledelayedexpansion
- set aa=▉
- set bb=
- set p=0
- :ff
- echo.
- set bb=!bb!!aa!
- set /a p+=4
- echo !bb!!p!%%
- if !p! equ 100 goto ks
- ping /n 2 127.1>nul
- cls
- goto ff
-
- :ks
- echo 在这里写你的p&pause>nul
复制代码
作者: 1797128183 时间: 2021-9-11 00:05
牛蛙牛蛙!支持支持!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |