*[PPx]スクリプトメモ 空気読んで解凍

7-Zipの話だが、以前は「空気読んで解凍」というコマンドがあったらしい。
動作は書庫に入っているのが1つの場合にはそのまま、複数だったら
フォルダを作成して解凍するというもの。

WinRARには解凍時に書庫名でフォルダを作成しそこに解凍する
スイッチ-adがあるが無条件作成なのでちょっと使いづらい。

「空気読んで解凍」モドキを実現するには
・-adをつけて解凍しフォルダが1つなら移動する
・解凍前に書庫のチェックして-adの有無を切り替える
の二つのアプローチがある。

最初前者の方法で実現しようとしたが、移動が思ったように
コントロールできず断念。
後者を行うにはWinRARには書庫内のエントリ数をカウントする機能がない。

使えそうなのはRARと7-Zip
ただしどちらも万能ではなくて欠点がある。
・rar.exeはRAR書庫にしか使えない
7-ZipはRAR5書庫に(対応予定はあるようだが未定)対応していない
あきらめて書庫に応じて切り替えることに。

ZIP/7z/LZH用 EntCnt7z.bat

@rem 7z、書庫の第一階層エントリ数取得
@rem 7z.exeの結果から\を含まない行数(直下のエントリ数)をカウント
@rem 念のためダミーパスワード付与
@echo off
SET PATH=C:\Program Files\7z938;%PATH%

for /F "USEBACKQ" %%a in ( `7z l -pdummy %1 ^| findstr /r /c:" [.D][.R][.H][.S][.A] " ^| find /v /c "\"` ) do (
	exit %%a
)

RAR専用 EntCntRAR.bat

@rem RAR書庫のルート直下エントリ数をチェック
@rem rar.exeの結果から\を含まない行数(直下のエントリ数)をカウント
@rem 分割書庫はファイ名にpart*.rarを指定する
@echo off
SET PATH=%PATH%;C:\Program Files\WinRAR
for /F "USEBACKQ" %%a in ( `Rar.exe lb -p- %1 ^| find /v /c "\"` ) do (
	exit %%a
)

呼び出し元

//直下エントリ数チェック
RFile   = iDir + iName[i] + '.' + iExt[i];	// カーソル位置ファイル名生成
command = '"' + PPx.Extract('%0%\\') + 'script\\EntCnt7z.bat"'
		+ ' "' + RFile  + '"';
RetCD   = WSHObj.run(command,0,true);

// 直下エントリ数判定
if (RetCD <= 1) {
	wRAROpt = '';
} else {
	wRAROpt = ' -ad';
}