![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-12 03:35 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [求助]文件分割合并BAT<已解决> |
| 可打印版本 1,445 / 14 |
| 第1楼 gcdj | 发表于 2010-10-25 08:03 |
| 初级用户 发帖 57 积分 64 | |
|
[求助]文件分割合并BAT<已解决> 求助文件分割合并BAT
求2个BAT 第一个BAT是 想要把MOV之类的文件分割成小于10MB的若干文件. 第二个BAT是 把第一个分割后的文件合并起来. 要求不能用RAR之类的补助软件.(因为公司不允许使用) [ Last edited by gcdj on 2010-11-7 at 09:38 ] |
|
| 第2楼 ZJHJ | 发表于 2010-10-25 20:43 |
| 高级用户 发帖 374 积分 609 | |
|
你的文件很大,用BAT恐怕你没有那么多时间。你还是用三方
|
|
| 第3楼 gcdj | 发表于 2010-10-26 06:35 |
| 初级用户 发帖 57 积分 64 | |
Originally posted by ZJHJ at 2010-10-25 20:43: 谢谢回答 文件不大,大概都在20MB到50MB左右的。 |
|
| 第4楼 ZJHJ | 发表于 2010-10-26 22:18 |
| 高级用户 发帖 374 积分 609 | |
|
BAT只适合分割纯文本文件。而且非常慢,200K的文件会大于2分钟,我说过恐怕你没有那么多时间。还是用三方split吧。
|
|
| 第5楼 gcdj | 发表于 2010-10-27 08:03 |
| 初级用户 发帖 57 积分 64 | |
|
VBS也一样慢吗?
|
|
| 第6楼 gcdj | 发表于 2010-10-27 10:04 |
| 初级用户 发帖 57 积分 64 | |
|
如果我把文件压缩成ZIP文件然后在分割呢?
例如'IMG_0085.mov 文件 把'IMG_0085.mov 文件压缩然后分割成 IMG_0085.1 和IMG_0085.2 合并的时候用下面命令是否行的同? COPY /B "IMG_0085.1"+"IMG_0085.2" "IMG_0085.zip" |
|
| 第7楼 gcdj | 发表于 2010-10-28 07:49 |
| 初级用户 发帖 57 积分 64 | |
|
makecab命令是否可以分割?
|
|
| 第8楼 gcdj | 发表于 2010-10-29 07:44 |
| 初级用户 发帖 57 积分 64 | |
|
谁能指点一下?
谢谢了 |
|
| 第9楼 gcdj | 发表于 2010-10-30 19:34 |
| 初级用户 发帖 57 积分 64 | |
|
别沉啊!
有哪位大哥帮我改一下? |
|
| 第10楼 qinchun36 | 发表于 2010-10-31 20:07 |
| 高级用户 发帖 400 积分 609 | |
| 第11楼 gcdj | 发表于 2010-11-01 08:01 |
| 初级用户 发帖 57 积分 64 | |
Originally posted by qinchun36 at 2010-10-31 20:07: |
|
| 第12楼 gcdj | 发表于 2010-11-02 07:45 |
| 初级用户 发帖 57 积分 64 | |
|
有些地方看不懂
能否注释一下每行都是做什么的!? 谢谢! |
|
| 第13楼 gcdj | 发表于 2010-11-05 07:50 |
| 初级用户 发帖 57 积分 64 | |
|
能否注释一下每行都是做什么的!?
|
|
| 第14楼 qinchun36 | 发表于 2010-11-05 10:29 |
| 高级用户 发帖 400 积分 609 | |
|
这本来是一个VBS文件,如果保存为BAT就要加这第一行使它以VBS的方式运行。
'1>nul 2>&1&cls&title 分割 %~nx1&@echo off&cmd /c cscript -nologo -e:vbs %~s0 %1&pause&exit 如果没有参数 If WScript.Arguments.Count = 0 Then 显示用法 WScript.Echo "用法:把一个要分割的文件拖到我上面来。" 退出程序 WScript.Quit End If 设置每个分块的大小(字节) lBlockSize = 10 * 1024 * 1024 创建文件系统对象 Set fso = CreateObject("Scripting.FileSystemObject") 得到第一个参数指定的文件 Set f = fso.GetFile(WScript.Arguments(0)) 创建一个用于【写】的流 wst Set wst = CreateObject("ADODB.Stream") 设置 wst 的类型为 二进制 wst.Type = 1 创建另一个流对象用于【读】原文件 With CreateObject("ADODB.Stream") 设置类型为二进制 .Type = 1 打开 .Open 加载指定的文件 .LoadFromFile f.Path 分块的计数 i = 0 循环直到当前指向位置大于或者等于原文件大小 Do Until .Position >= .Size 分块数+1 i = i + 1 打开 wst wst.Open 读取一个分块大小的数据并写入 wst wst.Write .Read(lBlockSize) 将 wst 中数据写入(覆盖)新文件,名称为 【原文件名.分块数】 wst.SaveToFile f.Path & "." & i, 2 确保所有数据写入完,这行一般不写 wst.Flush 关闭 wst wst.Close Loop 关闭原文件的流 .Close End With 拼接字符串 s,这个就是用于合并文件的BAT的内容 s = "@echo off" & vbNewLine & _ "set ""fn=" & f.Name & """" & vbNewLine & _ "copy nul ""%fn%"" 1>nul" & vbNewLine & _ "for /l %%i in (1, 1, " & i & ") do (copy /b ""%fn%"" + ""%fn%.%%i"" ""%fn%"") 1>nul" & vbNewLine & _ "echo 合并完成: " & f.Name & vbNewLine & _ "pause" 合并文件的批处理的全文件名 batPath = f.ParentFolder.Path & "\还原 [" & f.Name & "].bat" 生成批处理文件 fso.CreateTextFile(batPath, True).Write s 显示提示信息 WScript.Echo "分割完成,合并这些文件的批处理是" & vbCrLf & batPath |
|
| 第15楼 gcdj | 发表于 2010-11-05 16:42 |
| 初级用户 发帖 57 积分 64 | |
Originally posted by qinchun36 at 2010-11-5 10:29: 多谢!~讲解~~ |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |