|
7-Zipを使う以外の作戦をいろいろ探したのですが、パスワード付きzipがコマンド
ラインで解凍できるのは限られるようでした。
1つ見つけたのがGnuのunzip.exeです。
http://gnuwin32.sourceforge.net/packages/unzip.htm
ここの「Complete package, except sources」って所の右側にある「Setup」をク
リックして10秒くらい待つとダウンロードできます。これをインストールしてもら
って実行できるマクロを作ってみました。さらに結果も画面上に出てくるようにしま
した。
これでどうか試してみてほしいです。これでもダメでしたら、「PasswordZipExtra
ct」の場所が悪いのかもしれないので、どこか別の所、例えばデスクトップの配下に
作成するようなマクロにしてみる作戦をやってみたいと思います。
----------------------------------------------------------------------------
--------------------------
//暗号化Zipの自動解凍 PasswordZipExtract.mac
// 2019.02.12
// 2019.03.07 Version 1.1 パスワードの形式追加。
// 2019.03.12 Version 1.2 パスワードの形式さらに追加。
// 2021.04.26 7-Zipの代わりにunzip.exeでも解凍できるようにした。
// 参照: http://gnuwin32.sourceforge.net/packages/unzip.htm
//
// by 秀まるお
// hidesoft.8:04704| 暗号化zip自動解凍マクロ
//
//
//説明:
// このマクロはパスワード付きzipの添付ファイルを簡単に解凍する用のマクロです。
// パスワード付きzipの添付ファイル入りメールは、そのメールとは別便でパスワード
// を通知してきます。このマクロはその別便メールの中からパスワードを取り出して、
// 自動で解凍します。
//
// マクロを実行する前に、zip添付ファイル付きのメールとパスワード通知メールの
// 2通を選択して実行する必要があります。
//解凍したファイルは「ドキュメント」フォルダ配下のPasswordZipTempフォルダに
// 作成されます。古いファイルが残ってる場合はマクロ実行のタイミングで削除され
// てから解凍されます。
//
loaddll "tkinfo.dll";
// 秀丸メールの検索パック復元予約
#n = dllfunc("AutoRestoreFindPack");
// 秀丸エディタの検索条件復元予約
setcompatiblemode 0x00020000;
#n = dllfunc("SetJapaneseCodePageMode", 1);
#n = dllfunc("SelectedMailCount");
if( #n != 2 ) {
message "このマクロは暗号化zip付きメールと、その解凍用パスワード通知
メールの2通を選択した状態で実行してください。";
endmacro;
}
//対象のzipとパスワードを取り出す。
$zipfile = "";
$password = "";
#n = dllfunc("LockSelection");
while(1) {
#n = dllfunc("EnumSelection", 1);
if( #n == 0 ) {
break;
}
#foundzip = 0;
if( $zipfile == "" ) {
#count = dllfunc("CountCurrentHeader", "X-Attach");
if( #count != 0 ) {
#i = 0;
while( #i < #count ) {
$attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
$ext = dllfuncstr("ToLower", rightstr( $attach, 4 ) );
if( $ext == ".zip" ) {
$zipfile = dllfuncstr("HomeDir") + dllfuncstr("Curre
ntAccount") + "\\" + $attach;
#foundzip = 1;
break;
}
#i = #i + 1;
}
}
}
if( $password == "" && #foundzip == 0 ) {
$text = gettext( 0, 0, 999, linecount ); //メール本文全部
loaddll "HmJre.dll";
$text = dllfuncstr("ReplaceRegularNoCaseSense", "[\\r\\n]+", $te
xt, 0, " ", 2);
//改行を空白に変換しておく。
$text = dllfuncstr("ReplaceRegularNoCaseSense", " +", $text, 0,
" ", 2);
//全角空白を半角空白に変換しておく。
$text = $text + " "; //末端に空白を付けておく。
$pattern[0] = "^.* 【パスワード】[ ]*:?[ ]*([^ ]+?) .*$";
$pattern[1] = "^.* 解凍パスワード[ ]*[::][ ]*([^ ]+?) .*$";
$pattern[2] = "^.* Password[ ]*:[ ]*([^ ]+?) .*$";
$pattern[3] = "^.* \\[パスワード/Password\\][ ]*([^ ]+?) .*$";
$pattern[4] = "^.* 【暗号化パスワード\\(password\\)】[ ]*([^ ]
+?) .*$";
$pattern[5] = "^.* パスワードは「([^ ]+?)」.*$";
$pattern[6] = "^.* 解凍パスワード[ ]+([^ ]+?) .*$";
$pattern[7] = "^.* パスワード[ ]*[::][ ]*([^ ]+?) .*$";
#iPattern = 0;
while(1) {
$pattern = $pattern[#iPattern];
if( $pattern == "" ) {
break;
}
$password = dllfuncstr("ReplaceRegularNoCaseSense", $pattern,
$text, 0, "\\1", 0);
if( $password != "" ) {
break;
}
#iPattern = #iPattern + 1;
}
loaddll "tkinfo.dll"; //元に戻す。
}
}
#n = dllfunc("UnlockSelection", 1);
if( $zipfile == "" ) {
message "zip形式ファイルが見つかりませんでした。";
endmacro;
}
if( $password == "" ) {
message "パスワードが見つかりませんでした。";
endmacro;
}
//2021.04.26 unzip.exeがあればそっちを使う。
// http://gnuwin32.sourceforge.net/packages/unzip.htm
//
$unzip = "C:\\Program Files\\GnuWin32\\bin\\unzip.exe";
if( ! existfile( $unzip ) ) {
$unzip = "C:\\Program Files (x86)\\GnuWin32\\bin\\unzip.exe";
if( ! existfile( $unzip ) ) {
$unzip = "";
}
}
if( $unzip == "" ) {
$7zip = "C:\\Program files\\7-Zip\\7z.exe";
if( ! existfile( $7zip ) ) {
$7zip = "C:\\Program files (x86)\\7-Zip\\7z.exe";
if( ! existfile( $7zip ) ) {
message "7-Zipのプログラム用ファイルが見つかりません。7-Zip
をインストールしてください。\n\n" +
"7-Zipは、C:\\Program files\\7-Zip またはC:\\Program
files (x86)\\7-Zip にインストールされてる必要があります。";
endmacro;
}
}
}
openreg "CURRENTUSER","Software\\Microsoft\\Windows\\CurrentVersion\\Exp
lorer\\Shell Folders";
$outfolder = getregstr("Personal");
closereg;
$outfolder = $outfolder + "\\PasswordZipTemp";
if( existfile( $outfolder + "\\*.*" ) ) {
runsync2 "cmd.exe /c del /f /s /q \"" + $outfolder + "\\*.*\"";
//古いファイルのゴミを削除
sleep 300; //削除した場合は少しウェイトを入れる?
}
#n = dllfunc("Bypass_CreateDirectory", $outfolder);
if( #n != 0 ) {
sleep 300; //ディレクトリ作成した場合は少しウェイトを入れる?
}
if( $unzip != "" ) {
$command = "\"" + $unzip + "\"" + " -P" + $password + " -d\"" + $out
folder + "\" \"" + $zipfile + "\"";
} else {
$command = "\"" + $7zip + "\" x -p" + $password + " -o\"" + $outfold
er + "\" \"" + $zipfile + "\"";
}
#homehidemaru = hidemaruhandle(0);
#n = dllfunc("NewMail");
#n = dllfunc("SwitchHeaderView", 0); //ヘッダ表示なし
gofiletop;
beginsel;
gofileend;
insert $command + "\n\n";
gofileend;
runex $command
, 1 //同期
, 0 //標準入力なし
, ""
, 5 //標準出力をカーソル位置へ挿入
, ""
, 5 //標準エラー出力もカーソル位置へ挿入
, ""
, 0 //作業フォルダ指定なし
, ""
, 1 //表示あり
, 0 //描画あり
, 0 //ANSIで受け取り
, 0 //拡張フラグ指定なし
;
if( !result ) {
message "unzip.exeまたは7zipの実行に失敗しました。プログラムからの出
力内容を確認してください。";
endmacro;
}
gofileend;
insert "\n\nここの内容はunzip.exeまたは7-Zip.exeの実行結果です。解凍に成
功したら破棄してください。\n";
clearupdated;
Label_OpenFolder: ;
openbyshell $outfolder;
|
|