WSHでzip解凍&圧縮
なんか下書きしたまんまの記事があったのであっぷ。
WSHでzipフォルダ内のzipファイルを解凍し、必要なデータだけ抜き出して再圧縮してますね。
社内用ツールとして作った産物なので一部ボカして載せてるので多分ちゃんと動かないと思います。その辺は自己解決よろでっす。
動作確認:WindowsXP SP3
Option Explicit '--------------------------------------------- 'メイン処理 '--------------------------------------------- Call main() WScript.Quit 0 '--------------------------------------------- '--------------------------------------------- Dim rootPath Dim zipPath Dim dataPath Dim updatePath Dim workPath '--------------------------------------------- 'メイン関数 '--------------------------------------------- Sub main() rootPath = Replace(WScript.ScriptFullName,WScript.ScriptName,"") zipPath = rootPath & "zip\" dataPath = rootPath & "data\" updatePath = rootPath & "update\" With CreateObject("Scripting.FileSystemObject") '中間フォルダ作成 workPath = .BuildPath(rootPath, .GetTempName) .CreateFolder(workPath) 'メイン処理 'zipファイルを軸に***ファイルを補完していく Call funcMain(.GetFolder(zipPath)) '中間フォルダ削除 .DeleteFolder(workPath) End With Msgbox "実行終了" End Sub '--------------------------------------------- 'メイン処理関数 '--------------------------------------------- '--------------------------------------------- ' IN: zipファイル格納フォルダ '--------------------------------------------- Sub funcMain(objTargetFolder) Dim objFolder Dim objFile Dim objDataFolder Dim objDataFile '再帰処理 For Each objFolder In objTargetFolder.SubFolders Call funcMain(objFolder) Next '@@@DEBUG 'msgbox objTargetFolder With CreateObject("Scripting.FileSystemObject") For Each objFile In objTargetFolder.Files :Do 'zipファイルでない場合は繰り返し If LCase(.GetExtensionName(objFile.Name)) <> "zip" Then Exit Do '作業フォルダに解凍 With CreateObject("Shell.Application") .NameSpace(workPath).CopyHere .NameSpace(objFile.path).Items End With 'データをコピーする For Each objDataFile In .GetFolder(dataPath).Files :Do '***ファイルでない場合は繰り返し If LCase(.GetExtensionName(objDataFile.Name)) <> "***" Then Exit Do '作業フォルダにコピー '@@@DEBUG 'msgbox objDataFile.path 'msgbox workPath .CopyFile objDataFile.path, workPath & "\" Loop until 1 :Next 'ファイル圧縮 Call compressFile(Replace(WScript.ScriptFullName, WScript.ScriptName, objFile.Name)) 'ファイル移動 .MoveFile Replace(WScript.ScriptFullName, WScript.ScriptName, objFile.Name) updatePath '作業フォルダ内のファイルを削除する .DeleteFile workPath & "\*" Loop until 1 :Next End With End Sub '--------------------------------------------- 'ファイル圧縮処理関数 '--------------------------------------------- '--------------------------------------------- ' IN: zipファイル名 '--------------------------------------------- Sub compressFile(zipFileName) Dim i Dim objFile Dim strbuf Dim aryHex 'zipファイルを作るためのおまじない aryHex = Array(80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) For i = 0 To UBound(aryHex) strbuf = strbuf & Chr(aryHex(i)) Next 'zipファイル作成 With CreateObject("Scripting.FileSystemObject").CreateTextFile(zipFileName, True) .Write strbuf .Close End With With CreateObject("Scripting.FileSystemObject") 'フォルダ内のファイルを全て格納 For Each objFile In .GetFolder(workPath).Files CreateObject("Shell.Application").NameSpace(zipFileName).CopyHere(objFile.path) WScript.sleep 3000 Next End With End Sub