UnifyZip Unicode版

~書庫統一~


目次


前書き

Kurima様が作成されたUnifyZip Version 2.27を
ひらめが開発環境をVisual Studio 2017へ変更し、UNICODE対応を行った物です。
GitHubにて公開、配布しています。
https://tekkui.github.io/unifyzip/
https://github.com/tekkui/unifyzip/releases

目次へ


概要

zip(7z, lzh, rar)ファイルに対して

  • 任意のファイル名や拡張子のファイルを取り除く(正規表現で指定)
  • 任意のファイル名や拡張子のファイルのみ残す(正規表現で指定)
  • 圧縮率を変更する
  • 空フォルダを取り除く
  • 冗長なフォルダを削除する
  • ファイル、フォルダの更新日時を変更する
  • ファイル、フォルダの属性を変更する

  • といったことを行うツールです。

    UnifyZipで処理を行えば
    同じものを圧縮してあるはずなのに
    二つの書庫が完全に同じものにならない
    という状態を解消できます。

    手持ちの書庫を処理してみれば実は同じ書庫だった
    なんてことがきっとあるはずです。

    (あと 7z, lzh, rar → zip へのコンバーターとしても使えます…。)

    目次へ


    動作環境

    Windows XP, 7, 8, 10

    ※動作には「7-zip32.dll」が必要です。

    7-zip32.dll
    作者 秋田 稔 さん
    作者ページ http://akky.xrea.jp

    また「UNLHA32.DLL」があればLHA形式のファイルも扱えます。
    (ただし、処理後のファイルはzip形式となります)

    UNLHA32.DLL
    作者 Micco さん
    作者ページ http://micco.mars.jp/micindex.html

    加えて「unrar32.dll」があればRAR形式のファイルも扱えます。
    (ただし、処理後のファイルはzip形式となります)

    unrar32.dll
    作者 亀井 哲弥 さん
    統合アーカイバ http://www.madobe.net/archiver/lib/unrar32.html

    なお unrar32.dll の動作には unrar.dll が必要です。

    unrar.dll
    作者 Eugene Roshal さん
    作者ページ http://www.rarlab.com

    さらに「UNZIP32.DLL」があれば「7-zip32.dll」で扱えない形式のZIPファイルを扱えることがあります。

    UNZIP32.DLL
    作者 shoda T. さん
    作者ページ http://www.csdinc.co.jp/

    「nkf32.dll」があれば文字コード変換が行えます。

    nkf32.dll
    作者 市川 至 さん、The nkf Project.
    作者ページ https://ja.osdn.net/projects/nkf/

    目次へ


    構成ファイル

    (以下の3つは全て同じフォルダにいれてください)

    UnifyZip.exe
    ・・・アプリケーション本体

    UnifyZip.ini
    ・・・設定ファイル

    index.html
    ・・・本ファイル

    目次へ


    インストール・アンインストール方法

    インストールは適当なフォルダへアーカイブファイルに含まれる全てのファイルを入れてください。
    アーカイブの内容については「構成ファイル」の項を参照してください。

    アンインストールは、そのフォルダとその中の全てのファイルを削除してください。
    レジストリは一切操作していません。

    目次へ


    使い方

    処理を行いたいzip(7z, lzh, rar)ファイルまたは
    処理を行いたいzip(7z, lzh, rar)ファイルが含まれるフォルダを
    UnifyZip.exeにエクスプローラなどからドラッグアンドドロップすると
    コマンドプロンプトが現れて処理が開始されます。
    コマンドプロンプトには実行のログが出力されます。

    複数のファイルやフォルダをドラッグアンドドロップすることもできますが
    あまり多くのファイルを渡すとエラーが出ます。
    (恐らくWindowsの仕様による制限)

    フォルダが渡された場合はそのフォルダ内のファイルを処理します。

    各種設定は「UnifyZip.ini」を編集することで行います。
    詳しくは「オプション」の項を参照してください。

    目次へ


    オプション

    PriorityClass :
    プロセスの優先度を指定

    優先度
    0 通常
    1
    2
    3 リアルタイム
    4 通常以下
    5 通常以上

    SearchSubfolders :
    フォルダが渡された場合サブフォルダ以下に含まれるファイルも検索して処理するか否か

    サブフォルダ以下
    0 検索しない
    1 検索する

    DeletesEmptyFolder :
    空フォルダを削除するか否か

    空フォルダは追加設定や除外設定を行った結果
    空フォルダになったものも含む

    空フォルダ
    0 削除しない
    1 削除する

    UsesRecycleBin :
    元のファイルを削除する際ごみ箱に送るか否か

    削除の際ごみ箱に
    0 送らず削除
    1 送る

    RemovesRedundantFolder :
    冗長フォルダを削除するか

    例えば arc.zip の内容が
    arc.zip\folder1\folder2\file1.txt
    arc.zip\folder1\folder2\file2.txt
    で全てであった場合、冗長なフォルダを削除して
    arc.zip\file1.txt
    arc.zip\file2.txt
    のようにするか否か

    冗長フォルダ
    0 削除しない
    1 削除する
    2 削除する
    (処理後、書庫ファイル名を冗長フォルダ名に基づくものにする)

    2の場合の処理後の書庫ファイル名は例えば前述の例であれば「folder1.zip」となる

    ShowsProgress :
    プログレスダイアログを表示するか否か

    ダイアログ
    0 表示しない
    1 表示する

    表示を切ると処理にかかる時間が思いの外短縮されます

    BatchDecompress :
    一括解凍を行うか否か

    解凍
    0 必要なファイルのみ
    1 一括

    一括解凍が無効の場合、処理にあたって、書庫の中から最終的に必要なファイルのみを解凍しますが
    一括解凍を有効にすると、一度書庫内の全てのファイル・フォルダを解凍し
    そこから不要なファイルの削除などを行うようになります
    一括解凍の方が解凍の速度的に有利なことが多いと思われますが
    不要なファイルのみが壊れた書庫の解凍に失敗するようになってしまいます
    また、パスワード付きの書庫のパスワード入力に関する処理は各DLLに完全に依存するようになります
    結果としてできあがる書庫に違いはありません

    AppendFile :
    処理後残すファイルを正規表現で指定

    大文字/小文字の区別はされない
    指定を空にするとこのオプションは無効になる

    例えば
    AppendFile=.*\.jpg|.*\.jpeg
    とすると「.jpg」か「.jpeg」が末尾につくファイルを残す

    この指定に該当するファイルから
    除外設定ファイルを除いたものが
    最終的に残るファイルとなる

    ExcludeFile :
    処理後取り除くファイルを正規表現で指定

    大文字/小文字の区別はされない
    指定を空にするとこのオプションは無効になる

    例えば
    ExcludeFile=.*\.exe
    とすると「.exe」が末尾につくファイルを取り除く

    CompressLevel :
    圧縮レベルを指定する

    圧縮率
    -1 通常圧縮
    0 無圧縮
    1 低圧縮
    9 高圧縮

    -1, 1, 0, 9 以外は無効

    FileTimeMode :
    ファイルの更新日時の設定

    ファイルの更新日時
    0 変更しない
    1 指定の日時にする(FileTimeで指定)

    FolderTimeMode :
    フォルダの更新日時の設定

    フォルダの更新日時
    0 変更しない
    1 指定の日時にする(FolderTimeで指定)
    2 フォルダ内で最新の更新日時を持つファイル・フォルダにあわせる

    FileTime :
    FolderTime :
    ファイル・フォルダの更新日時の設定

    FileTimeModeやFolderTimeModeオプションが1の場合
    ファイル・フォルダの更新日時がここで指定した日時に変更される

    FileTime=1980/02/21 02:30:12

    のように指定する

    FileAttribute :
    FolderAttribute :
    ファイル・フォルダの属性の設定

    -1を指定すると属性の変更をしない
    属性は
    属性
    読み取り専用 1
    隠しファイル 2
    システムファイル 4
    アーカイブ 32
    以上の値の和で指定する

    例えば
    FileAttribute=33
    とすると
    ファイルの属性は「読み取り専用」と「アーカイブ」となる

    RemarkableFile :
    注目ファイルを正規表現で指定

    (大文字/小文字の区別はされない)
    注目ファイルがどう扱われるかは
    WarningLevelオプションの説明を参照のこと

    WarningLevel :
    警告レベルの設定

    動作
    0 何もしない
    1 書庫内のファイルが全て注目ファイルであった場合
    その旨を知らせ,書庫内のファイル一覧を表示し
    その書庫を処理しない
    2 書庫内のファイルに注目ファイルがあった場合
    その旨を知らせ,書庫内のファイル一覧を表示し
    その書庫を処理しない

    例えば
    RemarkableFile=.*\.exe
    WarningLevel=1
    とすると
    書庫が「.exe」が末尾につくファイルだけで構成されていた場合その書庫を処理しない

    注目ファイルのチェックは処理前、処理後に行われる

    RecyclesIndividualFiles :
    書庫内のファイルを削除する際ごみ箱に送るか否か

    削除の際ごみ箱に
    0 送らず削除
    1 送る

    BatchDecompressオプションが1の場合のみ有効

    ExitsImmediately :
    処理後エンターキーの入力を待たずに終了するか否か

    処理後エンターキーの入力
    0 待って終了
    1 待たずに終了

    PreCheck :
    処理前に、書庫が処理済みかどうかのチェックを行うか否か

    チェックの結果処理済みであると判定された場合は処理を行わない。
    ただし、このチェックは不完全であるため
    処理済みでない書庫を処理済みと判定してしまうことがある。

    書庫が処理済みかどうかのチェック
    0 行わない
    1 行う

    IgnoresEncryptedFiles :
    暗号化されたファイルを無視するかしないか

    暗号化されたファイル
    0 無視しない
    1 無視する

    Compress7Zip :
    圧縮に7-zip32.dllを使用するか、本体で行うか

    ZIP書庫作成で問題が発生した場合に切り替える

    ZIP書庫
    0 7-zip32.dllで作成する
    1 本体で作成する

    OutputTextFile :
    処理結果をファイルに出力するか、コンソールに表示するか

    コンソールで一部の文字が化けて部分を確認したい場合には
    ファイルに出力する。
    (ファイル出力時はExitsImmediately=1が強制される)

    処理結果
    0 コンソールに表示するか
    1 ファイルに出力する

    ConvertFileName :
    ファイル名・フォルダ名の文字コード変換するか

    文字コード
    0 変換しない
    1 変換する

    NkfOption :
    nkfへ指定するオプションを指定できる。

    標準では以下を指定している。
    半角カナ ⇒ 全角カナ (-X)
    全角英数 ⇒ 半角英数  (-Z0)
    全角スペース ⇒ 半角スペース  (-Z1)
    結合文字列 ⇒ 合成済み文字 (--ic=UTF8-MAC)
    URLエンコードされた文字 ⇒ デコードした文字 (--url-input)

    CompressWithTemporaryFolder :
    圧縮をTempフォルダで行うか

    圧縮ファイルを
    0 元ファイルと同じフォルダに作成する
    1 Tempフォルダに作成して、完成後にコピーする

    CheckArchive :
    作成した書庫のテストを行うか

    書庫のテスト
    0 行わない
    1 行う

    目次へ


    アドバイス

    「UnifyZip」にて処理を行うと
    内容が同じであるのにファイル名が異なっているファイルが見つかるようになるかもしれません。

    「UnDup」等のソフトを用いれば
    そういったファイル名の異なる同内容のファイルを見つけ削除などを行うことができます。

    UnDup
    作者 Sim-Gさん
    作者ページ http://hp.vector.co.jp/authors/VA032597/

    さて、同じファイルを格納してあるはずの書庫がバイナリ的に一致しないのはなぜでしょうか。
    冗長なフォルダを含んでいたり、空フォルダがあったり、余計なファイルがあったり
    といったことからそうなることはもちろんあるのでしょう。
    しかし、そうでなくとも書庫が一致しないケースがあります。
    それは、書庫内のファイルの更新日時や属性が異なっているケースです。
    書庫ファイルは、中に含まれるファイル・フォルダの更新日時や属性を保持しているため、
    中に含まれるファイル・フォルダの更新日時や属性が書庫にしたときに異なっていた場合、
    同じ内容のファイル・フォルダであってもそれらをまとめて作った書庫はバイナリ的に一致しません。
    良くあるケースは
    ・格納したフォルダの更新日時が異なっている
    ・格納したファイルの「アーカイブ」属性が異なっている
    などです。
    フォルダの更新日時は解凍しただけで変わる可能性があるので
    ある書庫を解凍して圧縮しただけでもできた書庫は元の書庫と一致しない事もあり得ます。

    ちなみに、初期状態の設定が僕のお薦めの設定です。

    目次へ


    注意事項

    UnifyZip の動作には「7-zip32.dll」等が必要です。
    なお、解凍については「7-zip32.dll」等に頼っている関係上
    扱えない種類の zip ファイルもあります。
    しかし、実際に解凍に失敗するケースとしては
    扱えない種類の zip ファイルであるためにそうなるよりも
    ファイルが壊れているために失敗するほうが多いと思います。

    作者のマシンだとrarファイルを処理した場合
    一度 F5 キーを押さないとエクスプローラ上にできあがった zip が表示されません。
    同じ現象が起こるようでしたらそのように対処してみてください。

    Version 2.18 より UnifyZip 本体で圧縮を行うようになりました。
    それに伴い、以前のバージョンで作られたものとは異なる書庫が作成される場合があります。
    書庫統一を目的としている以上、こういった変更は避けたかったのですが
    統一するならば、自分が正しいと思えるものに統一したいと考え、実行に踏み切りました。
    作成される書庫は PKWARE.ZIP File Format Specification に準拠するよう心がけています。
    書庫内のファイルの並び順については特に言及されていないようなので
    Windows のエクスプローラと同様の基準でソートするようにしています。
    「準拠できてないよ」「主流の形式はこうなっている」「そこの解釈は違うのでは」
    といった情報がありましたら是非作者まで。


    Version 2.28 より UNICODEに対応しました。

    設定ファイル(UnifyZip.ini)のエンコードをUTF-16 LE(BOM有り)に変更しています。
    古いまま(Shift_JIS)でも動作しますが、一部の機能が制限されます。
    取り除くファイルの正規表現などにUNICODE文字が指定できない為です。

    UNICODE系で不具合が発生した場合には、7-zip32.dllで圧縮を行うように設定ファイル変更して下さい。
    改善する可能性があります。

    コンソールへの結果出力で文字化けしている事がありますが
    プログラムからは正常に出力しています。
    コンソールではフォントリンクが動作していないと推測されます。
    設定でファイル出力に切り替える事で、文字化け無く結果を確認できます。

    7-zip32.dllで展開できないZIP書庫をUNZIP32.DLLで展開を行いますが
    UNZIP32.DLLはUNICODEに対応していない為に、正常に処理できないことがあります。

    nkf(Network Kanji Filter)を使用した
    書庫名や書庫内のフォルダ、ファイル名の文字コード変換に対応しました。
    オプションの変更にも対応していますが制約があり、入力はUTF-8またはUTF8-MAC、出力はUTF-16LEを指定して下さい。

    CompressWithTemporaryFolder=1とする事で
    TempフォルダがRAMドライブなどの高速なドライブであれば処理が速くなる事があります。
    ただし、最大で書庫の展開サイズの2倍を必要とするので注意してください。

    ZIP64には対応していませんが、7-zip32.dllはZIP64に対応しているので同DLLで処理をしている部分は動作します。
    7-zip32.dllで圧縮を行うように設定ファイル変更する事で、一部の機能(書庫が処理済みなど)は動作しませんが
    展開、再圧縮は行えます。

    Windows10 Anniversary Update(1067)以降で有効化できる長いパスには対応していません。

    目次へ


    著作権

    「UnifyZip」の著作権はKurimaが保有しています。
    転載・配布は内容に変更を加えない限り自由に行なってください。
    雑誌等への掲載につきましては事後でも構いませんのでメールでお知らせください。

    e-mail : KurimaKDV@hotmail.com
    home page : http://kurima.sakura.ne.jp/

    Version 2.28 の UNICODE対応はひらめが行っています。
    e-mail : tekkui@outlook.jp

    目次へ


    免責

    このプログラムを使用したことによって生じたいかなる損害も、作者は免責とさせていただきます。
    プログラム上にある、いかなるバグ、欠陥も作者はそれを訂正する義務を負いません。

    目次へ


    サポート

    「UnifyZip」に不具合を発見した場合は、ホームページの掲示板に書き込むか下記宛にメールを送ってください。なるべく対処したいと思います。
    また、こんな機能を追加してほしい、この機能は要らない、といった意見もどしどしお寄せください。

    e-mail : KurimaKDV@hotmail.com
    home page : http://kurima.sakura.ne.jp/

    UNICODE版の不具合などはGitのIssues、もしくはひらめへメールを送って下さい。
    Git issues : https://github.com/tekkui/unifyzip/issues
    e-mail : tekkui@outlook.jp

    目次へ


    開発環境

    Windows 10 Professional 64bit 1809
    Visual Studio 2017 Community 15.9.11

    及び、Appveyor

    動作確認

    Windows XP Service Pack 3
    Windows 7 Service Pack 1
    Windows 8.1
    Windows 10 1809

    目次へ


    更新履歴

    2005/02/28
     - Version 2.00

    2005/03/08
     - Version 2.01 2005/03/09
     - Version 2.02 2005/04/03
     - Version 2.03 2005/04/13
     - Version 2.04 2005/07/03
     - Version 2.05 2005/07/05
     - Version 2.06 2005/07/10
     - Version 2.07 2005/07/15
     - Version 2.08 2005/08/02
     - Version 2.09 2005/08/10
     - Version 2.10 2005/09/25
     - Version 2.11 2005/10/23
     - Version 2.12 2005/10/27
     - Version 2.13 2005/11/09
     - Version 2.14 2005/11/16
     - Version 2.15 2005/11/18
     - Version 2.16 2005/11/29
     - Version 2.17 2006/02/12
     - Version 2.18 2006/02/14
     - Version 2.19 2006/02/19
     - Version 2.20 2006/02/23
     - Version 2.21 2006/03/10
     - Version 2.22 2006/04/12
     - Version 2.23 2007/01/16
     - Version 2.24 2008/01/05
     - Version 2.25 2008/01/07
     - Version 2.26 2014/05/20
     - Version 2.27 2019/02/28
     - Version 2.28 a1 2019/03/12
     - Version 2.28 a2 2019/03/15
     - Version 2.28 a3 2019/03/19
     - Version 2.28 a4 2019/04/05
     - Version 2.28 a5 2019/04/08
     - Version 2.28 a6 2019/04/09
     - Version 2.28 a7 2019/04/23
     - Version 2.28 a8 2019/05/12
     - Version 2.28 a9

    目次へ


    謝辞

    動作テストをし、的確なアドバイスや感想をくれた yusuke氏 にこの場を借りてお礼を申し上げます。

    目次へ