解析エンジニアの自動化 blog

コツコツと自動化した方法を残す blog

ドラッグ&ドロップしたファイルを 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 と同じディレクトリに出来上がります。



コメント

VBScript では zip ファイルにパスワードがかけられないみたいなので、残念ですが C++ か何かで書き直そうかと思います。



以上