ドラッグ&ドロップしたファイルを zip ファイルにする VBScript
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
目的
フリーソフトで zip ファイルを作っていたのですが、ソフト開いて、ファイル選択して、実行ボタンを押す…という作業が煩わしかったので、ファイルをドロップしたら zip ファイルが作成される VBScript を作成します。
関数
ソースコード
'-------------------------------------------------------------------------------------------------------
' 引数が無かった時の処理
If WScript.Arguments.count = 0 then
WScript.Echo "引数が無いため、実行できません。" & vbNewLine & _
"ファイルをドロップしてください。"
WScript.Quit
End If
'-------------------------------------------------------------------------------------------------------
' ファイルシステムオブジェクト作成
Set objFileSys = CreateObject("Scripting.FileSystemObject")
'-------------------------------------------------------------------------------------------------------
' ドロップされた引数がファイル以外ならアラートして終了する
For each args In WScript.Arguments
'----------------------------------------------------------------------------------------------------
' ドロップされた引数がフォルダかファイルかを判定する
If objFileSys.FolderExists(args) then
'-------------------------------------------------------------------------------------------------
' is folder.
' ファイルシステムオブジェクトの破棄
Set objFileSys = Nothing
WScript.Echo "フォルダがドロップされました。" & vbNewLine & _
"処理を終了します。"
WScript.Quit
ElseIf objFileSys.FileExists(args) then
'-------------------------------------------------------------------------------------------------
' is file.
Else
'-------------------------------------------------------------------------------------------------
' is unknown.
' ファイルシステムオブジェクトの破棄
Set objFileSys = Nothing
WScript.Echo "フォルダ 及び ファイル とも認識できないデータがドロップされました。" & vbNewLine & _
"処理を終了します。"
WScript.Quit
End If
Next
'-------------------------------------------------------------------------------------------------------
' ファイルシステムオブジェクトの破棄
Set objFileSys = Nothing
'-------------------------------------------------------------------------------------------------------
' Zip ファイルを作成するパスの作成
ZipFile = SelfPath()
ZipFile = ZipFile & "\" & Date2PathFormat() & "_" & Time2PathFormat() & ".zip"
'-------------------------------------------------------------------------------------------------------
' Zip ファイルのヘッダーの作成
ZipFileInput = ZipFileHeader()
'-------------------------------------------------------------------------------------------------------
' 空の Zip ファイルの作成
Call NewZipFile(ZipFile, ZipFileInput)
'-------------------------------------------------------------------------------------------------------
' シェルオブジェクト作成
Set objWsh = WScript.CreateObject("Shell.Application")
'-------------------------------------------------------------------------------------------------------
' Zip ファイルの作成
For each args In WScript.Arguments
' Zip ファイルオブジェクトの作成
Set objFile = objWsh.NameSpace(ZipFile)
' Zip ファイルの中身のファイル数のカウント
ZipItemCnt = objFile.Items().Count
' Zip ファイルの中身を追加
objFile.CopyHere(args)
' 追加の完了を待つ
Do While ZipItemCnt = objFile.Items().Count
WScript.Sleep(250)
Loop
' Zip ファイルの中身のファイル数の更新
ZipItemCnt = ZipItemCnt + 1
Next
'-------------------------------------------------------------------------------------------------------
' シェルオブジェクトの破棄
Set objWsh = Nothing
Function SelfPath()
' ファイルシステムオブジェクト作成
Set objFileSys = CreateObject("Scripting.FileSystemObject")
' 自分のパスの取得
SelfPath = objFileSys.getParentFolderName(WScript.ScriptFullName)
' ファイルシステムオブジェクトの破棄
Set objFileSys = Nothing
End Function
Function Date2PathFormat()
' 日付をパスに使用できるように / を - に置換する
Date2PathFormat = Replace(Date, "/", "-")
End Function
Function Time2PathFormat()
' 時間をパスに使用できるように : を - に置換する
Time2PathFormat = Replace(Time, ":", "-")
End Function
Function ZipFileHeader()
' zip ファイルのヘッダ情報
Header = Array(80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
' 変換コード格納変数の準備
buf = ""
' ヘッダーのコード変換
For i = LBound(Header) To UBound(Header)
buf = buf & Chr(Header(i))
Next
' 戻り値
ZipFileHeader = buf
End Function
Sub NewZipFile(FilePath, InputString)
' ファイルシステムオブジェクト作成
Set objFileSys = CreateObject("Scripting.FileSystemObject")
' ファイルの作成
Set objFile = objFileSys.CreateTextFile(FilePath, True)
' ファイルへ出力
objFile.Write(InputString)
' ファイルを閉じる
objFile.Close
' ファイルオブジェクトの破棄
Set objFile = Nothing
' ファイルシステムオブジェクトの破棄
Set objFileSys = Nothing
End Sub
使い方
上のソースコードをメモ帳にコピペして、拡張子を『.vbs』にして、すべてのファイルとして保存すれば、ドロップしたファイルの zip ファイルが出来上がります。なお、 zip ファイルは VBScript と同じディレクトリに出来上がります。
以上