中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 高难度的显示进度的批处理代码有待高人分析
<<   [1] [2]  >>   >
作者:
标题: 高难度的显示进度的批处理代码有待高人分析 上一主题 | 下一主题
jellord
初级用户





积分 92
发帖 26
注册 2007-3-10
状态 离线
『楼 主』:  高难度的显示进度的批处理代码有待高人分析

@echo off :: 模拟进度,有剩余时间、已完成进度、进度条的显示 :: code by bg 2006-10-8 CMD@XP color 1f title. mode con lines=10 rem 进度条 ▉▉▉▉▉ set work=0 set n=0 set mo=0 set number=0 rem all是总数 set all=60 set time=%all% :show :check if %number% GTR %mo% set num=%num%▉&set /a mo=%mo%+1&goto check :2 cls echo 进度: %n% / %all% 剩余时间:%time%秒 echo. echo. echo 完成 %work% %%% echo. if not "%num%"=="" echo %num% if not "%num%"=="" echo %num% if %work%==100 goto end ping 127.1 -n 1 >nul set /a n=%n%+1 set /a time=%all%-%n% set /a work=(%n%)*100/(%all%) set /a number=%work%/3 set /a number=%number%+1 goto show endlocal :end endlocal pause>nul 请大家帮我分析一下该批处理的思路,实在看不懂,上面的show标签和2标签都没内容啊,为什么呢?check标签在后面的代码中也没看到被引用,那它怎么会被执行呢?请大家帮我分析一下,多谢多谢了!!!


2007-3-18 12:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 2 楼』:  

:check if %number% GTR %mo% set num=%num%▉&set /a mo=%mo%+1&goto check %number%大于%mo%就会执行set num=%num%▉&set /a mo=%mo%+1&goto check并返回:check,小于则直接到下一步 [ Last edited by zh159 on 2007-3-18 at 12:04 AM ]


2007-3-18 12:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 3 楼』:  

@echo off color 1f \\设置背景颜色 title. \\标题: mode con lines=10 \\窗口大小 rem 进度条 ▉▉▉▉▉ \\注释,多命令无作用 set work=0 set n=0 set mo=0 set number=0 \\此处为设置一系列变量 rem all是总数 set all=60 set time=%all% :show :check if %number% GTR %mo% set num=%num%▉&set /a mo=%mo%+1&goto check \\如果%number% 大于 %mo% 则设置变量num=%num%▉(注意这里,因为变量num的值为=%num%▉ 所以到第二次循环到这里是后num的值就会变成=%num%▉▉ 第3次为=%num%▉▉▉ ) :2 cls echo 进度: %n% / %all% 剩余时间:%time%秒 \\显示的进度,由于下面有set /a n=%n%+1 所以第2次循环到这里n的值为 2,第3次为3 因此就会有 1/60 2/60 3/60 的效果 echo. echo. echo 完成 %work% %%% \\与 进度: %n%/%all% 原理相同 echo. if not "%num%"=="" echo %num% \\上面的 num=%num%▉▉▉ 效果将在这里显示 if not "%num%"=="" echo %num% \\上同 if %work%==100 goto end 在%work%值没到100之前将不断回到上面重新执行 ping 127.1 -n 1 >nu 停顿1秒l set /a n=%n%+1 \\进度: %n% / %all% %n%的值就是每次在这里+1 set /a time=%all%-%n% \\%time%的值将每次在这里改变 set /a work=(%n%)*100/(%all%) 将%work%的值换算成%形式 set /a number=%work%/3 set /a number=%number%+1 \\此命令配合上一行命令将使%number%值 大于%mo%值 从而满足条件执行:check下的语句 goto show \\返回:show处,上面条件不满足时将会到达此处, endlocal \\此命令将是以上环境本地化,原来系统的环境将无法还原,估计是作者想搞恶作剧,建议测试的时候删除 :end


   此帖被 +4 点积分    点击查看详情   
评分人:【 jellord 分数: +2  时间:2007-3-19 02:52
评分人:【 tashaxin 分数: +2  时间:2007-3-30 23:39


2007-3-18 13:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jellord
初级用户





积分 92
发帖 26
注册 2007-3-10
状态 离线
『第 4 楼』:  

太感谢楼上了,不过还有一点小问题: 在代码中的第一个标签后面的代码是直接执行的吗?没有跳过第一个标签吧,否则后面所有的代码都会被跳过的,不知道是不是这样的?


2007-3-19 02:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xycoordinate
中级用户




积分 493
发帖 228
注册 2007-2-16
来自 安徽
状态 离线
『第 5 楼』:  

如何将它与"需要显示进度"的程序结合呢???


2007-3-19 03:24
查看资料  发送邮件  发短消息 网志  OICQ (226308607)  编辑帖子  回复  引用回复
axi
中级用户

脚本爱好者


积分 238
发帖 93
注册 2007-3-11
来自 GZ
状态 离线
『第 6 楼』:  

Originally posted by xycoordinate at 2007-3-18 02:24 PM: 如何将它与"需要显示进度"的程序结合呢???
对了,能与正在安装的程序结合才有用呀。


2007-3-20 01:30
查看资料  发短消息 网志  OICQ (453623262)  编辑帖子  回复  引用回复
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 7 楼』:  

第一个标签第一次是不会运行的,因为 if 条件在第一次的时候不满足 关于如何嵌入操作中,本人看到这个帖子的时候有了点灵感,应该不难实现,等有空的时候发个上来,先在这里说下思路,大家也可以一起来研究研究。 比如copy的时候,不断 dir 那个文件,把文件大小的数字提取出来放入 进度: %n% / %all%,以次来控制他的条件是否满足


2007-3-22 00:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 8 楼』:  

想想都知道: 比如你如何确定文件复制了1/10?! 如何复制了1/10暂停复制跳回显示进度条?! 进度条部分显示后如何跳回复制点?! PS:别说你用rar分10卷压缩,然后一卷卷复制,再解压缩 copy倒是有个/z参数来显示复制进步百分比


2007-3-22 00:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 9 楼』:  

可以用shart命令重新跳出一个窗口来显示进程 将文件总大小传给%all%,将已复制的数字传给%n%, 现在主要的问题是不知道dir命令能否检测出一个未复制完的文件的实际大小


2007-3-22 02:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 10 楼』:  

试过了,复制过程中显示文件的大小和原来的一样


2007-3-22 04:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
axi
中级用户

脚本爱好者


积分 238
发帖 93
注册 2007-3-11
来自 GZ
状态 离线
『第 11 楼』:  

Originally posted by zh159 at 2007-3-21 11:44: 想想都知道: 比如你如何确定文件复制了1/10?! 如何复制了1/10暂停复制跳回显示进度条?! 进度条部分显示后如何跳回复制点?! PS:别说你用rar分10卷压缩,然后一卷卷复制,再解压缩 copy倒是有个/z参数来显示复制进步百分比
原来 copy 有这个好用参数!请问如何提取这个由 copy /z 所得的进度百分比,并转到进度条中呢? [ Last edited by axi on 2007-3-21 at 04:09 PM ]


2007-3-22 05:03
查看资料  发短消息 网志  OICQ (453623262)  编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 12 楼』:  

这个参数的显示是copy自带的,如果你真想提取这个进度百分比,建议: 1、找软件高手 2、找微软 PS:批处理是单线程执行方式,每个批处理每次只能执行一个命令


2007-3-22 05:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
jackyggt
初级用户





积分 76
发帖 38
注册 2007-3-13
状态 离线
『第 13 楼』:  



2007-3-30 13:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 14 楼』:  

哦? 我倒有一个想法。 不写剩余时间就可以了。


2007-3-30 13:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bg
初级用户





积分 118
发帖 34
注册 2006-1-10
状态 离线
『第 15 楼』:  

这个批处理是我写的,我没有发出去,楼主怎么有??????!!!!!!


2007-4-5 18:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
<<   [1] [2]  >>   >
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: