調べ物:WSHでパスワード付きzipファイルを解凍する(UWSC併用) [プログラミング学習]
表題のような処理をしようと思って調べた。
0. 前提:
・UWSCはWSHスクリプトフォルダ直下のUWSCフォルダに存在する。
・UWSCスクリプトはUWSCと同じフォルダにある。
・パスワード付きzipファイルは、WSHスクリプトにドラッグ&ドロップで指定。解凍先はzipファイルと同じフォルダ。
UWSCスクリプト名:EnterPassZip.uws
UWSCiniファイル名:EnterPassZip.ini
1. WSHでUWSCを起動する。UWSCではパスワード入力スクリプトを読み込む
パスワードはUWSCのIniファイル関数で取得する
2. WSHでzipファイル解凍を実行する
※zipファイル解凍は同期処理なので、解凍が終わるまでスクリプトは実行待ちになる、はず。
WSHスクリプト:
UWSCスクリプト:
0. 前提:
・UWSCはWSHスクリプトフォルダ直下のUWSCフォルダに存在する。
・UWSCスクリプトはUWSCと同じフォルダにある。
・パスワード付きzipファイルは、WSHスクリプトにドラッグ&ドロップで指定。解凍先はzipファイルと同じフォルダ。
UWSCスクリプト名:EnterPassZip.uws
UWSCiniファイル名:EnterPassZip.ini
1. WSHでUWSCを起動する。UWSCではパスワード入力スクリプトを読み込む
パスワードはUWSCのIniファイル関数で取得する
2. WSHでzipファイル解凍を実行する
※zipファイル解凍は同期処理なので、解凍が終わるまでスクリプトは実行待ちになる、はず。
WSHスクリプト:
Option Explicit Dim objFSO Dim ShApp Dim WSHShell Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set WSHShell = WScript.CreateObject("WScript.Shell") Set ShApp = CreateObject("Shell.Application") WSHShell.CurrentDirectory = _ Replace(WScript.ScriptFullName, WScript.ScriptName,"") ' ************************************************ ' ************************************************ ' UWSC起動: WSHShell.Run "%ComSpec% /c " & WSHShell.CurrentDirectory &"\UWSC\UWSC.exe " _ &WSHShell.CurrentDirectory &"\"&"UWSC\EnterPassZip.uws" ' 解凍処理実行 ExtractZipFolder (WScript.Arguments(0)) '******************************************** '******************************************** Private Sub ExtractZipFolder(strZipFileName) Dim objFSO Dim ExtractFolder Dim strTempFolder Dim objSubFolder 'オブジェクトを作ります set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If LCase(objFSO.GetExtensionName(strZipFileName)) <> "zip" Then WScript.Echo("ZIP形式のみ解凍する") WScript.Quit() End If 'フォルダを生成する ExtractFolder = objFSO.GetParentFolderName(strZipFileName) & "\" _ & objFSO.GetBaseName(strZipFileName) If Not objFSO.FolderExists(ExtractFolder) Then objFSO.CreateFolder(ExtractFolder) End If '解凍 With CreateObject("Shell.Application") .NameSpace(ExtractFolder).CopyHere _ .NameSpace(strZipFileName).Items End With ' Temporaryフォルダ内の一時フォルダ削除 ' Temporaryフォルダ取得 strTempFolder = objFSO.GetSpecialFolder(2) ' 該当フォルダがあった場合、削除する For Each objSubFolder In objFSO.GetFolder(strTempFolder).SubFolders if InStr(objSubFolder.Name,objFSO.GetBaseName(strZipFileName)) > 0 Then WScript.Echo objSubFolder.Name End if Next End Sub
UWSCスクリプト:
Dim retPass,retClick Dim idProg //パスワードをINIファイルから読み込む idProg = GETID("パスワード") retPass = READINI( "ZIP_PASS", "PASSWORD") //パスワードの入力ウィンドウをアクティブ化 CTRLWIN(idProg,ACTIVATE) SENDSTR(idProg,retPass) retCick = CLKITEM( idProg, "OK" )
コメント 0