圧縮・解凍ソフト - 7-Zip - 再帰的に解凍する
- 1. 概要
- 2. 状況
- 3. 展開
1. 概要
表題のとおりのことをしたいのですが、説明が難しいけど、一応、次項で説明してみます。
本ページは、下記のサイトを参考にさせていただきました。
「フォルダ内の圧縮ファイルを再帰的に展開 」
「7-Zip のコマンドライン操作」
2. 状況
あるフォルダの配下に、ランダムにフォルダのツリーが存在し、そのフォルダの中に、ランダムに「.cab」が存在します。
これを、フォルダAとしますわな。
フォルダAとまったく同じツリー構造で、まったく同じ位置に、同一ファイル名の「.cab」が存在する、フォルダBが存在します。
このフォルダAとフォルダBの末端まで含めたフォルダ、ファイルの中身が、まったく同じ、あるいは違うことを証明しなければならなくなったのですよ。
「Winmerge」で、比較しようとしたのですが、「Winmerge」は、「.cab」は、日付が違うと・・・なのか?、中身が同じでも異なるファイルとして認識するのです。
「Winmerge」自体に、「.cab」を展開する機能も、持っているのですが、全部のフォルダの中をいちいち開いていってたら、身が持たない。
なんか、有料だったり、無料だったりするソフトで、そのような機能があるとうたっている、ソフトをダウンロードして使ってみようとしたのですが。
使い方がどうも、要領を得ない。
自分の望む動きをするプログラムを書こうかとも思いましたが、時間がない。
なんとかできないかなぁと思っていたら、参考サイトへたどり着いたわけです。
3. 展開
最初に見つけたサイトで、下記のバッチを得ました。
@echo off
for /r %%i in (*.cav) do "C:\Program Files\7-Zip\7z.exe" x -o%%~di%%~pi %%i
ちょっと不安だったので、「echo」オンして動かし、最後に「PAUSE」をいれたりしましたがね。
ほぼ、予定通りの動きをさせることができました。
ただまぁ、できあがったものを「Winmerge」で比較しようとすると、結局、中身に「.cab」が残っているとフォルダ自体に相違があるという表示になってしまう。
なので、元の「.cab」は、解凍後に削除しちゃいたいのです。
フォルダA、フォルダBは、全体として、そこまで大きくないし、フォルダ全体をバックアップしたりコピーするのも、なんとか耐えられる程度の時間なので。
コピーして、そこで、バッチを動かせばいいわけです。
でこんな風にしました。
for /r %%i in (*.cav) do "C:\Program Files\7-Zip\7z.exe" x -o%%~di%%~pi %%i && del %%i
PAUSE
これで、思い通りの動きになりました。
|
|