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