最近は、通信の高速化やメールボックスの大容量化のせいか、大きいファイルを添付したメールが送られてきますが、客先作業で作業現場からファイルを送ってもらったりする場合、あまり大きい添付ファイルは遠慮しなければなりません。ただ、zipで圧縮しても数MBになってしまうことがあり、困ることがよくあります。
そこで、ファイルを小さいサイズに分割して複数のメールに分けて送りたい、というニーズが出てくるのですが、ファイルを分割するツールはWindowsには標準で入っていません。DOSコマンドで、cabという形式で分割することは可能ですが、これをメールで送るのはセキュリティ上NGという場合が多く、やはりそのまま単純に分割したい。
フリーソフトのファイル分割ツールは結構ありますが、お客さんの端末に勝手に入れるわけにもいかないし、入れてくれとも言えません。
そのような場合、Windowsの標準機能だけでしかも簡単にファイル分割する方法として、今回は、VBScriptを使用します。VBScriptであれば、中身はテキストなので、拡張子を.txtにしてメール添付で現場に送れ、現場で拡張子を.vbsにすれば実行できます。(VBScriptが何であるかやユーザ権限の問題については、別途調べてください)
分割したいファイルをドラッグアンドドロップするだけで、ファイルの先頭から1024KB(=1MB)ごとに分割するVBScriptを作ったので公開します。入出力ファイルをバイナリとして扱う必要があるのがポイントです。
分割されたファイルを1つに戻す(結合する)には、DOSコマンドで
(hoge.zipが、hoge.zip.0、hoge.zip.1、hoge.zip.2に3分割された場合の例)
とすればよい。
※2017年5月24日追記;下記VBScriptのソースの最後に、余計な</code>というブログ表示用のHTMLタグが表示されてしまっていたのを修正しました
---(ここから)
---(ここまで)
※自分用に作ったものなので、実行環境や入出力の仕様は決めうちで、エラー処理も省略しています。
挙動を確認の上、自己責任でご利用ください
ソースをカスタマイズして利用頂いて結構です。間違い等がありましたら、コメント頂けると助かります。
そこで、ファイルを小さいサイズに分割して複数のメールに分けて送りたい、というニーズが出てくるのですが、ファイルを分割するツールはWindowsには標準で入っていません。DOSコマンドで、cabという形式で分割することは可能ですが、これをメールで送るのはセキュリティ上NGという場合が多く、やはりそのまま単純に分割したい。
フリーソフトのファイル分割ツールは結構ありますが、お客さんの端末に勝手に入れるわけにもいかないし、入れてくれとも言えません。
そのような場合、Windowsの標準機能だけでしかも簡単にファイル分割する方法として、今回は、VBScriptを使用します。VBScriptであれば、中身はテキストなので、拡張子を.txtにしてメール添付で現場に送れ、現場で拡張子を.vbsにすれば実行できます。(VBScriptが何であるかやユーザ権限の問題については、別途調べてください)
分割したいファイルをドラッグアンドドロップするだけで、ファイルの先頭から1024KB(=1MB)ごとに分割するVBScriptを作ったので公開します。入出力ファイルをバイナリとして扱う必要があるのがポイントです。
分割されたファイルを1つに戻す(結合する)には、DOSコマンドで
COPY /B hoge.zip.0+hoge.zip.1+hoge.zip.2 hoge.zip
(hoge.zipが、hoge.zip.0、hoge.zip.1、hoge.zip.2に3分割された場合の例)
とすればよい。
※2017年5月24日追記;下記VBScriptのソースの最後に、余計な</code>というブログ表示用のHTMLタグが表示されてしまっていたのを修正しました
---(ここから)
Option Explicit
Dim args, arg
Dim BYTES
Dim sourceStream
Dim outputStream
'分割サイズ(byte)
BYTES = 1024000
Set args = WScript.Arguments
If args.Count <> 1 Then
WScript.Echo "Drag and drop only one file."
WScript.Quit
End If
Dim InputFilename
Dim OutputFilename
Dim objFS, ret, objFile
InputFilename = args(0)
Set args = nothing
Set objFS = CreateObject("Scripting.FileSystemObject")
ret = objFS.FileExists(InputFilename)
If ret Then
Set objFile = objFS.GetFile(InputFilename)
If objFile.Size < BYTES Then
WScript.Echo "File size is too small. It requires more than " & FormatNumber(BYTES, 0) & " byte." & vbCrLf & InputFilename & vbCrLf & "(" & FormatNumber(objFile.Size, 0) & " byte)"
WScript.Quit
End If
WScript.Echo "A target file is " & InputFilename & vbCrLf & "(" & FormatNumber(objFile.Size, 0) & " byte)"
Set objFile = nothing
Else
WScript.Echo "No file."
WScript.Quit
End If
Set objFS = nothing
Set sourceStream = CreateObject("ADODB.Stream")
sourceStream.Type = 1
sourceStream.Open
sourceStream.LoadFromFile InputFilename
sourceStream.Position = 0
Set outputStream = CreateObject("ADODB.Stream")
outputStream.Type = 1
outputStream.Open
outputStream.Position = 0
Dim no
no = 0
Do While sourceStream.EOS = False
OutputFilename = InputFilename & "." & no
outputStream.Write sourceStream.Read( BYTES )
outputStream.SaveToFile OutputFilename, 2
outputStream.Close
outputStream.Open
no = no + 1
Loop
WScript.Echo InputFilename & " -> Success : " & no
sourceStream.Close
outputStream.Close
Set sourceStream = nothing
Set outputStream = nothing
---(ここまで)
※自分用に作ったものなので、実行環境や入出力の仕様は決めうちで、エラー処理も省略しています。
挙動を確認の上、自己責任でご利用ください
ソースをカスタマイズして利用頂いて結構です。間違い等がありましたら、コメント頂けると助かります。