VBScriptで7-zipを呼んで、複数のフォルダを個別に圧縮するバッチファイルです。
7-zipは従来のzipファイルよりも圧縮率の高い「7z形式」が使用できる圧縮解凍ソフトの新定番です。
標準では個別圧縮に対応していませんが、バッチファイルをつくることでドラッグ&ドロップで個別圧縮を実現できます。
Option Explicit Call Main() Sub Main() Dim args, arg Dim objShell Dim arcPath Dim command Dim delim Dim dest Dim rtn Set args = WScript.Arguments '7z.exeのパスを指定してください arcPath = """C:\Program Files\7-Zip\7z.exe""" For Each arg In args rtn = ArgumentTypeCheck(arg) If rtn = 0 Then dest = arg ElseIf rtn = 3 Then '対象がファイルの場合は拡張子を取り除く delim = InStrRev(arg, ".", -1, 1) dest = Left(arg, delim - 1) End If Command = arcPath & " a -t7z " & """" & dest & ".7z" & """" & " " & """" & arg & """" Set objShell = WScript.CreateObject("WScript.Shell") objShell.Run Command, 1, True Set objShell = Nothing Next End Sub '処理対象がファイルか、ディレクトリかを判定する関数 '戻り値 ' 0:フォルダ ' 1:ファイル(ショートカット) ' 2:ファイル(URLショートカット) ' 3:ファイル ' -1:不明 Function ArgumentTypeCheck(arg) Dim rtn Dim objFSO, strExName On Error Resume Next rtn = -1 Set objFSO = CreateObject("Scrippting.FileSystemObject") If objFSO.FileExists(arg) Then rtn = 0 Else If objFSO.FileExists(arg) Then strExName = objFSO.GetExtensionName(arg) Select Case UCase(strExName) Case "LNK": rtn = 1 Case "URL": rtn = 2 Case Else: rtn = 3 End Select End If End If Set objFSO = Nothing ArgumentTypeCheck = rtn End Function
7-zipのインストール状況に合わせて、18行目のパスを修整してください。
コメント