中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [讨论] CMD 下进度条实用化的问题。[求精]
作者:
标题: [讨论] CMD 下进度条实用化的问题。[求精] 上一主题 | 下一主题
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『楼 主』:  [讨论] CMD 下进度条实用化的问题。[求精]

经过目前的测试。。大家觉得好的话。请给我加分。呵呵 复制文件的进度条显示问题得到初步解决! 利用点: start /min copy 路径:\文件名 路径:\做多线程的运行。。 难点:获取硬盘拷贝文件的速率问题。 自己写了一个批处理做为测试,该值为每微妙/86000字节(值向上取整的结果) 注意,不同规格的硬盘有不同的结果。 需要大家自己测试。(自己已经解决,而且做为进度条提示就是评估复制时间) 算法思想。 1,利用 dir 指令获取 拷贝 文件的文件大小。 2,文件大小除去硬盘传输速率得到动画的延时时间 3,利用这个时间写动画。 我在下面的一楼里就直接把这个代码给出来了。 注:代码经过精简,省去了第一步。。(因为是算法嘛:) [ Last edited by flyinspace on 2007-4-1 at 02:34 PM ]




知,不觉多。不知,乃求知
2007-4-2 03:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 2 楼』:  先用一楼。一会发代码

@echo off & SetLocal EnableDelayedExpansion set BackSpace= set RateBar=□ set Rate=0 set AllFile=1 set ExistFile=0 set FileName=测试.rar set /a FileSize=42719467 set /a CopySpeed=86500 set /a UseTime=%FileSize%/%CopySpeed% set /a ShowTime=%UseTime%/100 set Rate_Num=0 set Space_Num=11 set /p=正在拷贝文件:[%FileName%],需用时间:%UseTime%微秒<nul & echo. echo --------------------------------------------------- rem start /min [path]FileName [path] set /p=目前已经完成: <nul for /l %%i in (0,1,100) do ( set /a output=%%i%%10 if "!output!"=="0" ( rem echo The %%i Time set /p=!BackSpace!<nul set /a Space_Num=!Space_Num!-1 set /a Rate_Num=!Rate_Num!+1 call :PutChar !Rate_Num! !Space_Num! ) if %%i LSS 10 set /p=: %%i%%<nul if %%i GEQ 10 set /p=: %%i%%<nul call :ProcDelay %ShowTime% set /p=<nul ) echo. echo 拷贝已经完成! echo. goto EXIT ::::::::::::::输出空格::::::::::::::::::::::: :PutChar _num_ _a_ for /l %%i in (1,1,%1) do ( rem echo !RateBar! set /p=!RateBar!<nul ) for /l %%i in (1,1,%2) do ( set /p= <nul ) goto :EOF ::::::::::::::延时子程序::::::::::::::::::::: :ProcDelay _Delay_ for /f "tokens=1-4 delims=:. " %%i in ("%time%") do set start=%%i%%j%%k%%l :_TimeReturn_ for /f "tokens=1-4 delims=:. " %%i in ("%time%") do set end=%%i%%j%%k%%l set /a s=%end%-%start% if %s% LSS %1 goto _TimeReturn_ ENDLOCAL & GOTO :EOF :EXIT pause [ Last edited by flyinspace on 2007-4-1 at 02:25 PM ]


   此帖被 +4 点积分        点击查看详情   
评分人:【 huzixuan 分数: +4  时间:2007-4-2 07:01




知,不觉多。不知,乃求知
2007-4-2 03:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





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

其实,该代码不少代码都是借鉴别人的。 例如延时子程序。(作者未知) 但其他的则是根据c++里面的算法。。 利用set /p的特性完成的。。 这个程序和网上已经有的进度条不同。。 是可以实用化的。




知,不觉多。不知,乃求知
2007-4-2 03:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




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

思路不错,但是硬盘传输速率随文件大小一般变化较大,而且微秒值太小,批处理基本反映不过来,毫秒也勉强 [ Last edited by zh159 on 2007-4-1 at 03:10 PM ]


2007-4-2 04:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





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

楼上提得不错。 因为是提出算法。 所以没有给出错误的判断。。。 在我编写的实际批处理例子中。我的方法有不同。。 如果文件的大小小于 86000 * 10 则,动画过程没有延时。。。 2,争对不同的硬盘。我获取硬盘的速率是根据拷贝一个cmd.exe 到 另一个盘的时间做为基准的。。。 3,还有判断,若是同一个盘内的拷贝,也是动画没有延时的。。 这个是实际应用的处理。。 目前还在测试中,就没有在这里献丑了。 提出上面的算法只是把个人的思路提出来和大家一起讨论。。。 实际的代码已经有 32K大小了。。 而且测试也非常成功,只是在copy文件太大的时候,会有点不准。。有1到3秒的误差。 [ Last edited by flyinspace on 2007-4-1 at 03:27 PM ]




知,不觉多。不知,乃求知
2007-4-2 04:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huzixuan
高级用户




积分 537
发帖 219
注册 2006-10-31
来自 芜湖
状态 离线
『第 6 楼』:  

饿,没看懂




江湖远 碧空长 路茫茫 一个人漫无目的的奔跑,风,刺骨的冷....
2007-4-2 07:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





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

那里不懂呢??




知,不觉多。不知,乃求知
2007-4-2 09:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
uiopuiop
中级用户





积分 400
发帖 211
注册 2007-9-30
状态 离线
『第 8 楼』:  

运行命令行X(比如COPY 一个大文件)但它要等运行完后才能执行其他代码,有没有办法让它和进度条同时执行和显示?


2007-10-2 12:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 9 楼』:  

copy /z




C:\>BLOG initiative.yo2.cn/ C:\>hh.exe ntcmds.chm::/ntcmds.htm C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2007-10-2 12:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jaceyxp
初级用户





积分 21
发帖 10
注册 2007-3-30
状态 离线
『第 10 楼』:  

我要运行: xcopy c:\abc\*.* /s d:\aaa /y 这个命令加在那里??


2009-1-12 15:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: