标题: 批处理复制进度条 [打印本页]
作者: defanive 时间: 2009-4-25 19:13 标题: 批处理复制进度条
平时复制文件的时候,都有一个窗口显示复制的百分比。。。
窗口里面有进度条显示,还有剩余的时间。。。
以前尝试过写这个功能,不过最终以失败告终。。。
原因是无论是copy还是xcopy,其复制时,即使未完成,显示的文件大小都是不变的。。。
以前也有试过用type,先不考虑文件是否完整,其速度实在让人吐血。。。
网上搜索了相关的资料,未果。。。
注意,进度条显示的是已复制和欲复制的百分比。。。
如果完成的话,剩余时间的显示也不成问题了。。。
然后就是复制一个文件夹时,当前复制的文件有一个进度条,整个的进度也有一个进度条。。。
可能会难很多。。。
希望众高人一起看下,个人觉得实在有难度。。。
PS:第三方免了。。。
目前进度:
1、实现单文件复制
2、实现基本进度条及百分比显示
调用方法:
CopyX.bat 源路径 新路径
CopyX代码(可从附件下载):- @echo off
- :: Made By Defanive
- setlocal enabledelayedexpansion
- mode con: cols=26 lines=3
- title 复制中,请稍候
- color 71
- del /f /q Copy._tmp 2>nul
- cls
- mshta vbscript:createobject("wscript.shell").run("Cmd /c Copy /z "+""""+"%~1"+""""+" "+""""+"%~2"+""""+" >"+""""+"%~dp0\Copy._tmp"+"""",0)(window.close)
- set "bar=>>>>>>>>>>>>>>>>>>>>--------------------"
- echo 复制中,请稍候
- :ready
- if not exist Copy._tmp goto ready
- :copying
- for /f "tokens=*" %%a in ('type Copy._tmp') do (
- set "str=%%a"
- if "!str:~-4!"=="已复制 " (
- set /a "per=!str:~-9,3!"
- set /a "pt=20-per/5"
- call set "barn=%%bar:~!pt!,20%%"
- set /p=!barn! !per!%%<nul
- goto copying
- )
- )
- cls
- del /f /q Copy._tmp 2>nul
- title 复制完成!
- cls
- echo.
- echo 复制完成!
- ping -n 2 127.0.0.1>nul
- exit
复制代码
链接: https://pan.baidu.com/s/1hluuahxtZz7azrLT1CwO7g?pwd=m5q8
作者: 随风 时间: 2009-4-25 19:22
感觉这类东西,平白无辜消费系统大量资源,真正华而不实。况且即使写出来了,得到也不可能是真正的进度,只是模拟进度。
作者: batman 时间: 2009-4-25 19:45
多年前就有n人进行了努力尝试,最终结论都是——费力不得好。。。
作者: defanive 时间: 2009-4-25 20:54
如果能得到复制时的大小,也就能算出百分比了。。。
至于前辈们的尝试,我还没有找到相关的资料。。。
作者: wangjmh 时间: 2009-4-26 13:14
真正的百分比应该不好得到,最多只能自己设定进度,然后在某一条件成立时显示出来吧
作者: a794685135 时间: 2009-4-27 13:19
单算文件个数做百分比吧,,
作者: pusofalse 时间: 2009-4-27 13:38
能调用api的话一切都OK,期待有人能写个批处理调用api的工具出来。
作者: batman 时间: 2009-4-29 10:40
复制文件的进度条没做到,但做了个简单的,示例如下:- @echo off&setlocal enabledelayedexpansion
- cd.>num.txt&echo.
- for /l %%a in (1,1,10000) do (
- echo %%a >>num.txt
- set /a a=%%a%%500
- if !a! equ 0 set /p=★<nul
- )
- start num.txt
复制代码
作者: Batcher 时间: 2009-4-29 13:03
copy /z不是可以显示百分比么?
http://www.bathome.net/viewthread.php?tid=780#pid27947
作者: defanive 时间: 2009-5-1 23:02
9L强大。。。
那么,现在进度条如何处理?
作者: defanive 时间: 2009-5-2 10:22
报告进度:
通过Copy /Z功能已实现基本进度条和百分比显示,目前只支持单文件
代码及下载在主楼
作者: netbenton 时间: 2009-5-3 20:58
根据文件大小来做百分比。- @echo off
- if "%date:~-3,2%" equ "星期" (set 中=y)
- if defined 中 (
- set ec1=正在准备,请稍候。。。&set ec2=当前目录
- set ec3=当前进度&set ec4=总进度&set ec5=正在考拷贝&set ec6=完成
- ) else (
- set ec1=Please wait...&set ec2=Directory&set ec3=copying
- set ec4=Total&set ec5=File&set "ec6=OK!!"
- )
- echo %ec1%
- setlocal enabledelayedexpansion
- set n=1
- for /f "skip=2 delims=" %%a in ('dir /s /-c /a-d %1') do (
- set "str=%%a"
- if defined 中 (
- if "!str:~-3!" equ "的目录" (set/a d+=1&set #!d!n=!str:~1,-4!) else (
- for /f "tokens=1,2,3*" %%b in ("%%a") do (
- if "%%d" neq "" (
- set var=%%d
- if defined end (set/a total=!var:~,-3!+0&goto :next) else (
- if "%%c" equ "个文件" (set #!d!s=%%b&set/a n=1,#!d!z=!var:~,-3!+1) else (set #!d!.!n!=%%e&set/a #!d!.!n!.=!var:~,-1!+0,n+=1)
- )) else (set end=y)
- ))
- ) else (
- if "!str:~1,9!" equ "Directory" (set/a d+=1&set #!d!n=!str:~14!) else (
- for /f "tokens=1,2,3*" %%b in ("%%a") do (
- if "%%b" neq "Total" (
- set var=%%d
- if defined end (set/a total=!var:~,-3!+0&goto :next) else (
- if "%%c" equ "File(s)" (set #!d!s=%%b&set/a n=1,#!d!z=!var:~,-3!+1) else (set #!d!.!n!=%%e&set/a #!d!.!n!.=!var:~,-1!+0,n+=1)
- )) else (set end=y)
- ))
- )
- )
-
- :next
- set "bbb=>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
- set "eee= =============================="
- for /l %%a in (1,1,%d%) do (
- set dir=
- set num=
- for /l %%b in (1,1,!#%%as!) do (set/a num+=#%%a.%%b.
- set/a ec=!num! / !#%%az!
- set/a tot+=#%%a.%%b.
- set/a et=!tot! / !total!
- set/a b1=ec/3+1,b2=et/3+1
-
- rem copy /z !#%%an!\!#%%a.%%b! %2 >nul
- cls
-
- echo.&echo.&echo.&echo.
- echo %ec5%: !#%%a.%%b!
- for /f "tokens=1,2" %%c in ("!b1! !b2!") do (
-
- echo %ec2%: !#%%an!
- echo %ec3%: !bbb:~-%%c!!ec!%%!eee:~%%c!
- echo.
- echo %ec4%: !bbb:~-%%d!!et!%%!eee:~%%d!
- )
- ping -n 1 127.1 >nul
- ping -n 1 127.1 >nul
- )
-
- )
- echo !ec6!
- pause
复制代码
[ 本帖最后由 netbenton 于 2009-5-3 21:00 编辑 ]
作者: defanive 时间: 2009-5-17 11:44
12L,代码强大。。。
作者: 523066680 时间: 2009-6-14 15:24
安装程序时详细的进度条,纯粹是效果
- @echo off&setlocal enabledelayedexpansion&mode con cols=25 lines=1
- title 进度条
- set /a a=0
- :a
- set /a a+=1
- for %%a in (▏ ▎ ▍ ▌ ▋ ▊ ▉) do (set /p=%%a<nul &ping -n 1 127.1>nul &ping -n 1 127.1>nul &ping -n 1 127.1>nul &set /p= <nul)
- set /p=█<nul
- if %a% lss 10 (goto :a)
- set /p= End<nul&pause>nul
复制代码
[ 本帖最后由 523066680 于 2009-6-14 15:27 编辑 ]
作者: canyuexiaolang 时间: 2009-8-26 15:23
没那种技术,再说不借助第三方软件也不行啊
作者: airen007 时间: 2010-3-13 10:59
拷贝指定文件该怎么做呢?拷贝完继续执行其他命令又该怎么处理
作者: airen007 时间: 2010-3-13 11:00
如有解决办法,请高手们通知下。谢谢QQ:844780466.。。。
作者: ejzhang 时间: 2010-8-2 12:10
这也行?真是PF啊!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |