VBScript
7zip
7z

[VBS][7zip]コマンドラインからドライブごと圧縮したしたZipファイルを解凍するとき特定のフォルダ、拡張子を除外する

前回の逆

[VBS][7zip]コマンドラインからドライブを圧縮するとき特定のフォルダを圧縮から除外する
の逆パターンとして圧縮してあるファイルから特定のフォルダを除外するということをやります。
ドライブごと圧縮したzipファイルを同じドライブに解凍すると、ごみ箱が壊れていますというエラーが出るケースがあります。
どうもドライブごとZipファイルにする場合、System Volume Information と $Recycle.Bin 以下の隠しフォルダが競合することが原因のようです。
そこで前回はそれを取り除いて解凍する方法が分かったのでご紹介しました。
しかし、以前に大量にzipでバックアップしていた場合、取り除くのも大変です。
そこで、フィルタを設定して解凍することを考えました。前回の逆のパターンですが、こちらもやろうとするとあまり書いてないので記録します。よかったら参考にしてください。

設定

ドキュメントフォルダにあるE.zip
をeドライブに解凍する(Eドライブには上記の2つの隠しフォルダ以外は存在しないものとします。)
ただしエラーを起こさせる上記のフォルダ
System volume information
Recycle.bin
を除外する。
さらに
Jpg,jpegファイルを除外する
7zip.exeはc:\program files\7-zip\7z.exeにある
とりあえずパスワードはなしとする

extactexclude.vbs
Const pPass = ""
Dim fs, ofol, ofile, oSubFol, WSH, objDocFol, oShell, strScr, tgFolder
Set WSH = CreateObject("WScript.Shell")
Set oShell = CreateObject("Shell.Application")
Set objDocFol = fs.GetFolder("C:\users\name\Documents") 'Change Your Conputer Username
Set tgFolder = fs.GetFolder("E:\")
Set ofile = fs.GetFile(objDocFol.Path & "\E.zip")

strScr = """" & WSH.ExpandEnvironmentStrings("%PROGRAMW6432%") & "\7-zip\7z.exe""" & " x -bt -y """ & ofile.Path & """" & " -o""" & "E:\""" & " -p" & pPass & " -xr!""*\$RECYCLE.BIN\"" -xr!""*\System Volume Information\"" -xr!""*\*.jp*g"""
WSH.Exec strScr

Set WSH = Nothing
Set oShell = Nothing
Set fs = Nothing
Wscript.Quit

ポイント

  1. 圧縮するときと同じく -xr! を使用する
  2. -xr!は複数使ってもよく、フォルダとファイルを同時に除外してもよい。
  3. jpeg,jpgがあるのでjp*gとする
  4. !を使用する場合二重引用符で囲む方がエラーが出ないらしい。
  5. これを正規表現と記載しているサイトがあるが、7zipの解説はワイルドカードとなっている。
  6. 4.は具体的には以下のように記述する。解凍するzipファイル内のフォルダのすべてのjpgまたはjpegファイルを解凍から除外するには、
-xr!"*\*.jp*g"

のようにする。

なお、jpgファイルは解凍する場合には strScrを次のように書く。

strScr = """" & WSH.ExpandEnvironmentStrings("%PROGRAMW6432%") & "\7-zip\7z.exe""" & " x -bt -y """ & ofile.Path & """" & " -o""" & "E:\""" & " -p" & pPass & " -xr!""*\$RECYCLE.BIN\"" -xr!""*\System Volume Information\"""

つまり-xr!のあとはダブルクオーテーションが2つきて、除外ファイル、フォルダ名を書いたら駄ダブルクォーテーション3つにするとよい。これは未実験だがマニュアルではハイフンを2つ並べるとStop Persingとなっているので

strScr = """" & WSH.ExpandEnvironmentStrings("%PROGRAMW6432%") & "\7-zip\7z.exe""" & " x -bt -y """ & ofile.Path & """" & " -o""" & "E:\""" & " -p" & pPass & " -xr!""*\$RECYCLE.BIN\"" -xr!""*\System Volume Information\"" --xr!""*\*.jp*g"""

--xr!のようにハイフンを2つ続けるとそれ以降のオプションの記述は無効化されるはずだが、解凍のVBScriptは危険なので実験ができないので、別の機会に確かめたい。