ちょっとしたことがありまして
ファイルの足し算引き算をしたいなと思いまして・・・はいw
環境は Windows ですよ
足し算っていうのは二つのファイルの単純な結合でよいので以下のような
足し算はWindows標準のコマンドで楽勝ですな
copy /B a.gif + b.gif addaAndB.gif
引き算はその逆で・・・具体的には・・・
片方のファイル(B)のサイズの分をもう片方のファイル(A)の先頭から除去ですなw
ファイルA:123456789123456789
ファイルB:1234
だったとしたら、A-B:56789123456789
という内容のファイルを得たいですな
まぁいろいろな方法があると思いますが・・・・
探せば条件を満たすフリーウェアはあるでしょうけど今回は VBScript
で作ってみましたよ
せっかくなのでこちらで公開いたしますよ
ちなみにソースコードが読める方は、一部なんじゃこりゃ?
と思われる箇所があると思いますがw
楽天ブログにソースコードをベタッと貼ると、不等号記号をタグだと認識してくれちゃって
タグ間違いだから保存しませんって怒られちゃったりすることの回避策ですw
@echo off
echo b.gif ファイルをc.gif ファイルと結合する
copy /B b.gif + c.gif addBandC.gif
pause
echo 結合されたファイルからb.gif ファイルを除去して、c.gif を抽出する
Cscript AdivB.vbs addBandC.gif b.gif /s
pause
pause
以下を、 AdivB.vbs
のファイル名で保存して利用してください
Option Explicit
Function ReadMe()
Dim HelpMSG1,HelpMSG2
HelpMSG1= _
"機能:ファイルA から、ファイルBのファイル・サイズの分だけ、先頭から除去したファイルを生成する。" & vbCrLf & _
"利用方法: AdivB filenameA filenameB [/s] " & vbCrLf & _
" : 第3引数は省略可能。/s を指定するとサイレント・モードとなり一切のメッセージ表示をしません " & vbCrLf & _
"" & vbCrLf
HelpMSG2= _
"備考:AのファイルサイズよりもBのほうが大きい場合の検査だけは組み込んでいますが " & vbCrLf & _
"データが一致しているかどうかは検査していません。" & vbCrLf & _
"" & vbCrLf & _
"このスクリプトは、VBS で記述しているという一点でのみ存在価値があると思っています。" & vbCrLf & _
"" & vbCrLf & _
"著作権とか気にせず自由に自己責任で利用してください。利用に関しては一切の責任を負いません。" & vbCrLf & _
"" & vbCrLf & _
"参考文献:http://blog.goo.ne.jp/n-best/e/a564cbd4cb1e904b45d701227ed555a7"
ReadMe= HelpMSG1
End Function
'--------------------------------------
'以下メインルーチン
'--------------------------------------
'COM の定数を以下のようにクラスで擬似的に定義してます
Dim StreamTypeEnum
Dim StreamReadEnum
Dim SaveOptionsEnum
Call Create_Const_Class()
Call Main()
Sub HelpMSG(option1)
Dim ReadMeMSG
ReadMeMSG=ReadMe()
ReadMeMSG= "引数の指定が間違っています:(" & option1 & ") " & vbCrLf & vbCrLf & ReadMeMSG
WScript.Echo ReadMeMSG
WScript.Quit
End Sub
Sub Main()
Dim IsSilentMode
Dim args, arg
Dim BYTESA,BYTESB
Set args = WScript.Arguments
If args.Count=0 Or args.Count=1 Then
Call HelpMSG(1)
End If
If args.Count=3 Then
if LCase(args(2))="/s" Then
IsSilentMode=true
Else
Call HelpMSG(2)
End If
End If
Dim sourceStreamA
Dim sourceStreamB
Dim outputStream
Dim InputFilenameA
Dim InputFilenameB
Dim OutputFilename
Dim objFS, ret, objFileA, objFileB
InputFilenameA = args(0)
InputFilenameB = args(01)
Set args = nothing
Set objFS = CreateObject("Scripting.FileSystemObject")
ret = objFS.FileExists(InputFilenameA)
If ret Then
Set objFileA = objFS.GetFile(InputFilenameA)
BYTESA= objFileA.Size
if not IsSilentMode then
WScript.Echo "A target file is " & InputFilenameA & vbCrLf & "(" & FormatNumber(BYTESA, 0) & " byte)"
End if
Set objFileA = nothing
Else
if not IsSilentMode then
WScript.Echo "Can not Open A file ."
End if
WScript.Quit
End If
ret = objFS.FileExists(InputFilenameB)
If ret Then
Set objFileB = objFS.GetFile(InputFilenameB)
BYTESB= objFileB.Size
If int(BYTESA/BYTESB)=0 then
if not IsSilentMode then
WScript.Echo "A File size is too small. It requires more than B FIle size."
End if
WScript.Quit
End if
if not IsSilentMode then
WScript.Echo "B target file is " & InputFilenameB & vbCrLf & "(" & FormatNumber(BYTESB, 0) & " byte)"
End if
Set objFileB = nothing
Else
if not IsSilentMode then
WScript.Echo "Can not Open B file ."
End if
WScript.Quit
End If
Set objFS = nothing
Set sourceStreamA = CreateObject("ADODB.Stream")
sourceStreamA.Type = StreamTypeEnum.adTypeBinary
sourceStreamA.Open
sourceStreamA.LoadFromFile InputFilenameA
sourceStreamA.Position = 0
' Set sourceStreamB = CreateObject("ADODB.Stream")
' sourceStreamB.Type = StreamTypeEnum.adTypeBinary
' sourceStreamB.Open
' sourceStreamB.LoadFromFile InputFilenameA
' sourceStreamB.Position = 0
Set outputStream = CreateObject("ADODB.Stream")
outputStream.Type = 1
outputStream.Open
outputStream.Position = 0
'読み捨て
sourceStreamA.Read( BYTESB )
OutputFilename = InputFilenameA & "div" & InputFilenameB
outputStream.Write sourceStreamA.Read(StreamReadEnum.adReadAll)
outputStream.SaveToFile OutputFilename, SaveOptionsEnum.adSaveCreateOverWrite
sourceStreamA.Close
if not IsSilentMode then
WScript.Echo "Executed a Successfully."
End if
End Sub
Sub Create_Const_Class()
set StreamTypeEnum = new clsStreamTypeEnum
set StreamReadEnum = new clsStreamReadEnum
set SaveOptionsEnum = new clsSaveOptionsEnum
End Sub
Class clsStreamTypeEnum
'https://msdn.microsoft.com/ja-jp/library/cc389884.aspx
public adTypeBinary
public adTypeText
Sub Class_Initialize()
adTypeBinary=1
adTypeText=2
End Sub
End Class
Class clsStreamReadEnum
'https://msdn.microsoft.com/ja-jp/library/cc389881.aspx
public adReadAll
public adReadLine
Sub Class_Initialize()
adReadAll=-1
adReadLine=-2
End Sub
End Class
Class clsSaveOptionsEnum
'https://msdn.microsoft.com/ja-jp/library/cc389870.aspx
public adSaveCreateNotExist
public adSaveCreateOverWrite
Sub Class_Initialize()
adSaveCreateNotExist=1
adSaveCreateOverWrite=2
End Sub
End Class
国産オープン・ソースのファイル暗号化ソ… 2017/03/06
PR
キーワードサーチ
カテゴリ
コメント新着