中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]文件分割合并BAT<已解决>
作者:
标题: [求助]文件分割合并BAT<已解决> 上一主题 | 下一主题
gcdj
初级用户





积分 64
发帖 57
注册 2010-2-25
状态 离线
『楼 主』:  [求助]文件分割合并BAT<已解决>

求助文件分割合并BAT

求2个BAT

第一个BAT是
想要把MOV之类的文件分割成小于10MB的若干文件.


第二个BAT是
把第一个分割后的文件合并起来.


要求不能用RAR之类的补助软件.(因为公司不允许使用)

[ Last edited by gcdj on 2010-11-7 at 09:38 ]

2010-10-25 08:03
查看资料  发送邮件  发短消息 网志  OICQ (12403198)  编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 2 楼』:  

你的文件很大,用BAT恐怕你没有那么多时间。你还是用三方

2010-10-25 20:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
gcdj
初级用户





积分 64
发帖 57
注册 2010-2-25
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by ZJHJ at 2010-10-25 20:43:
你的文件很大,用BAT恐怕你没有那么多时间。你还是用三方

谢谢回答

文件不大,大概都在20MB到50MB左右的。

2010-10-26 06:35
查看资料  发送邮件  发短消息 网志  OICQ (12403198)  编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 4 楼』:  

BAT只适合分割纯文本文件。而且非常慢,200K的文件会大于2分钟,我说过恐怕你没有那么多时间。还是用三方split吧。

2010-10-26 22:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
gcdj
初级用户





积分 64
发帖 57
注册 2010-2-25
状态 离线
『第 5 楼』:  

VBS也一样慢吗?

2010-10-27 08:03
查看资料  发送邮件  发短消息 网志  OICQ (12403198)  编辑帖子  回复  引用回复
gcdj
初级用户





积分 64
发帖 57
注册 2010-2-25
状态 离线
『第 6 楼』:  

如果我把文件压缩成ZIP文件然后在分割呢?

例如'IMG_0085.mov 文件

把'IMG_0085.mov 文件压缩然后分割成 IMG_0085.1 和IMG_0085.2

合并的时候用下面命令是否行的同?
COPY /B "IMG_0085.1"+"IMG_0085.2" "IMG_0085.zip"

2010-10-27 10:04
查看资料  发送邮件  发短消息 网志  OICQ (12403198)  编辑帖子  回复  引用回复
gcdj
初级用户





积分 64
发帖 57
注册 2010-2-25
状态 离线
『第 7 楼』:  

makecab命令是否可以分割?

2010-10-28 07:49
查看资料  发送邮件  发短消息 网志  OICQ (12403198)  编辑帖子  回复  引用回复
gcdj
初级用户





积分 64
发帖 57
注册 2010-2-25
状态 离线
『第 8 楼』:  

谁能指点一下?

谢谢了

2010-10-29 07:44
查看资料  发送邮件  发短消息 网志  OICQ (12403198)  编辑帖子  回复  引用回复
gcdj
初级用户





积分 64
发帖 57
注册 2010-2-25
状态 离线
『第 9 楼』:  

别沉啊!

有哪位大哥帮我改一下?

2010-10-30 19:34
查看资料  发送邮件  发短消息 网志  OICQ (12403198)  编辑帖子  回复  引用回复
qinchun36
高级用户

据说是李先生


积分 609
发帖 400
注册 2008-4-23
状态 离线
『第 10 楼』:  


'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))
Set wst = CreateObject("ADODB.Stream")
    wst.Type = 1
With CreateObject("ADODB.Stream")
    .Type = 1
    .Open
    .LoadFromFile f.Path
    i = 0
    Do Until .Position >= .Size
        i = i + 1
        wst.Open
        wst.Write .Read(lBlockSize)
        wst.SaveToFile f.Path & "." & i, 2
        wst.Flush
        wst.Close
    Loop
    .Close
End With
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


2010-10-31 20:07
查看资料  发送邮件  发短消息 网志  OICQ (182484135)  编辑帖子  回复  引用回复
gcdj
初级用户





积分 64
发帖 57
注册 2010-2-25
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by qinchun36 at 2010-10-31 20:07:
[code]
'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 " ...

学习了!
厉害!!!!

多谢!~

2010-11-1 08:01
查看资料  发送邮件  发短消息 网志  OICQ (12403198)  编辑帖子  回复  引用回复
gcdj
初级用户





积分 64
发帖 57
注册 2010-2-25
状态 离线
『第 12 楼』:  

有些地方看不懂

能否注释一下每行都是做什么的!?

谢谢!

2010-11-2 07:45
查看资料  发送邮件  发短消息 网志  OICQ (12403198)  编辑帖子  回复  引用回复
gcdj
初级用户





积分 64
发帖 57
注册 2010-2-25
状态 离线
『第 13 楼』:  

能否注释一下每行都是做什么的!?

2010-11-5 07:50
查看资料  发送邮件  发短消息 网志  OICQ (12403198)  编辑帖子  回复  引用回复
qinchun36
高级用户

据说是李先生


积分 609
发帖 400
注册 2008-4-23
状态 离线
『第 14 楼』:  

这本来是一个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

2010-11-5 10:29
查看资料  发送邮件  发短消息 网志  OICQ (182484135)  编辑帖子  回复  引用回复
gcdj
初级用户





积分 64
发帖 57
注册 2010-2-25
状态 离线
『第 15 楼』:  



  Quote:
Originally posted by qinchun36 at 2010-11-5 10:29:
这本来是一个VBS文件,如果保存为BAT就要加这第一行使它以VBS的方式运行。
'1>nul 2>&1&cls&title 分割 %~nx1&@echo off&cmd /c cscript -nologo -e ...

多谢!~讲解~~

2010-11-5 16:42
查看资料  发送邮件  发短消息 网志  OICQ (12403198)  编辑帖子  回复  引用回复

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


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



论坛跳转: