======================================================================= CAB32.DLL Ver 0.92 コマンド説明ファイル ======================================================================= 宮内 邦昭 (Aug.01,2000) -------------------------------------------------------------------------- 0. はじめに 1. コマンドラインの様式 2. 命令の詳細 3. スイッチオプションの詳細 4. 基準ディレクトリについて 5. レスポンスファイル 6. ワイルドカードについて 7. 制限事項 8. 環境変数 9. 作業ファイル名 -------------------------------------------------------------------------- 0.はじめに ======================= まず、キャビネットの操作に関して、CAB32.DLLでは次の操作が可能です。 (1) キャビネットを新規に作成する(マルチボリューム対応) (2) キャビネットから指定(あるいは全て)のファイルを解凍する (3) キャビネットに格納されているファイルの情報を取得する (4) 自己解凍形式書庫を作成する そして、次の操作はできません(サポートしていないということではなく 仕様的に不可能ということです) (1) 既存のキャビネットへファイルを後から追加する (2) 既存のキャビネットに格納されているファイルを個別に削除する (3) 既存のキャビネットに格納されているファイルを新しいファイルで更新する つまり、CAB32では、いったん作成されたキャビネットの格納ファイルは、解凍す ること以外に何も操作できません。 CAB32を利用するアプリケーション側で、キャビネットを解凍してから再構築する 処理をおこなえば、格納されているファイルの中の特定ファイルを削除すること も可能ですが、そもそもキャビネットは配布用に設計されているので、格納ファ イルを新しいファイルで更新しながら保管するような用途には向いていないかも しれません。 1.コマンドラインの様式 ======================= [-] [-...] [.CAB] [\] [...] 命令及びスイッチは大文字・小文字を明確に区別します。また、スイッチの位置 については、その指定位置を問いません。 スイッチを表す文字としては '-' が使えます。ただし、スイッチ文字を混在する 事はできません。 命令はコマンドラインの最初の引数としてください。なお、命令を省略した場 合は '-l' が指定されたものとみなします。 CAB32.DLL はコマンドラインの最 初のファイル名を キャビネットファイル名とみなします 展開すべきファイルのリスト(レスポンスファイル)を含めファイル名を1つ 以上与える事ができます。 レスポンスファイル名の前には '@' を付けなければ いけません。 レスポンスファイルにファイルリストを記述する場合には、テキスト1行に1 ファイルづつ記述するか、1行に複数のファイルを納める場合には、各ファイル 名はスペース(0x20)で区切ります。パス名自体に空白が含まれる場合には、 当該ファイル名は""(ダブルクォーテーション)で必ず括らなくてはなりません。 また、1行に記述できるファイルのリストは、文字列長で1024バイト未満、ファ イル数で128個までです。 複数行で指定する場合には、1行の限度は上記のとおりですが、行数の限度は ありません。 基準フォルダ(base_path)を指定する場合には、パス名を必ず '\' で終わらせて 指定しなければなりません。 フィルタ名は MSDOS の慣習に従います。 "*.*" は全てのファイルを意味します。 "*.DOC" は ".DOC" の拡張子を持つファイルを意味します。"?A*.*" は2文字目 に 'A' を持つファイルを意味します。 フィルタ名のデフォルト(つまりファイルのリストがない場合)は "*.*" です。 スペースを含むファイル名のファイルを扱いたい場合は '"' で括るようにしま す。括られていない場合は複数の文字列と判断されます。'"' で括る際は、以下 の例におけるスイッチ指定のようにパラメータ全てを括るようにしてください。 例 : -a cab_name c:\test.cab "C:\Program Files\Test\" *.doc (参考)  Cab(), CabFindFirst() については キャビネットファイルの指定にフィルタ を使用する事ができます。 2.命令の詳細 ============= a: キャビネットを作成 --------------------- ファイルを圧縮してキャビネットに格納します。書庫は新規に作成 されます。 もし、"-r" スイッチが指定されていれば、 CAB32.DLL は指定されたフィルタ に合致するようなサブフォルダのすべてのファイルを格納します。 例: -a -r cab_name subdir\*.* subdir\ 以下のすべてのファイル・フォルダを圧縮して格納 c: キャビネットの検査 --------------------- 正当なキャビネットファイルかどうかを検査します。 キャビネットファイルのヘッダのみの正当性を検査します。 書庫の厳密な検査をおこなう場合には -t 命令を利用してください。 f: 自己解凍形式キャビネットの作成 --------------------------------- 既存のキャビネットから自己解凍形式キャビネットを作成します。 作成されるファイル名は、既存のキャビネット名の拡張子が ".exe" に変更され たものとなります。 このコマンドは、既存のキャビネットを自己解凍形式キャビネットに変更するだ けです。 なお、既に自己解凍形式キャビネットになっているものなど、ファイルの先頭か らキャビネット書庫として認識できないファイルを元キャビネットとして指定し ても自己解凍形式キャビネットは作成されません。 例: -f cab_name.cab c:\temp\ cab_name.cab を元にして、c:\temp\ フォルダの下に cab_name.exe を 作成します。 l: キャビネットの内容の一覧出力 ------------------------------- 書庫の内容の一覧を出力します。ファイル一覧は、格納された順序で 表示されます。 t: キャビネットの検査 --------------------- 正当なキャビネットファイルかどうかを検査します。 キャビネットファイルのヘッダおよび格納データの正当性を検査します。 書庫のヘッダのみの簡易検査をおこなう場合には -c 命令を利用してください。 x: キャビネット内のファイルを展開 --------------------------------- この命令は、書庫から1個以上のファイルをカレントフォルダか、指定されていれば 基準フォルダに展開します。CAB32.DLL は "-o" スイッチが指定されていないと、既 に存在するファイルを上書きする前に利用者に確認します。 利用者は、(1) 新しいファイルのみ、(2) 強制上書き、(3) 無視 の3つから処理を 選択できます。 3.スイッチオプションの詳細 =========================== i: サイレントモード ------------------- キャビネットファイルの作成・解凍の際に、進捗状況を示すウィンドウを 表示しません。 例 -x -i -j test.cab c:\ *.cpp j: フォルダを無視して解凍 ------------------------- キャビネットにパス名とともに格納されているファイルを、パス名を無視 して、基準フォルダ(解凍先フォルダ)へ解凍します。 例 -x -j test.cab c:\ *.* k: マルチボリュームで作成されたキャビネットを連続して解凍 --------------------------------------------------------- マルチボリュームで作成されたキャビネットを連続して解凍します。 'v' スイッチを指定して作成したキャビネットを展開する場合に利用 します。 FDなどに1つずつキャビネットファイルが格納されている場合など、 同一フォルダに次に解凍するキャビネットファイルが無い場合には 次のキャビネットファイルの位置を指定するダイアログボックスを 表示します。 例 -x -k test1.cab f:\data *.* 'v' スイッチを指定して作成されたキャビネットファイルを次々に 解凍します。マルチボリュームで作成されたキャビネットファイル の2番目のキャビネットを指定すると('v' スイッチの項の例でいうと "test2.cab")、2番目以降のキャビネットファイルを連続して解凍 します。 m: 圧縮方式の指定 ----------------- 圧縮方式には、次の3つがあります。 (1) MSZIP形式 -mz MSZIP形式で圧縮します。圧縮方式が指定されていない場合には レジストリの設定により圧縮方式が決定します。レジストリの 設定が無い場合にはMSZIP方式が標準となります。 (2) LZX形式 -ml[:nn] 15 ≦ nn ≦ 21 LZX形式で圧縮します。圧縮レベルは 15 〜 21 までの数値をとります。 圧縮レベルが指定されていない場合には、レジストリの設定により レベルが決定します。レジストリの設定が無い場合には 15 が指定され たものとみなします。 値が 15 に近いほどスピード重視、値が 21 に近いほど圧縮率重視とな ります。 MSZIP方式と比較すると、LZXのレベル15 より MSZIP形式の方がスピード 重視になります。圧縮率を最優先とするなら、圧縮方式は LZX でレベル は 21 を指定してください。 ちなみに LZH形式の -lh7- 圧縮と圧縮率の比較をすると LZX/21 形式の 方が圧縮率は平均して高いようです。 (3) QUANTUM形式 -mq[:nn] 1 ≦ nn ≦ 7 QUANTUM形式で圧縮します。圧縮レベルは 1 〜 7 までの数値をとります。 圧縮レベルが指定されていないと 1 が指定されたものとみなします。 ※ これは将来のために予約されています。現バージョンではサポートして いません。指定するとエラーを返します。 (4) 無圧縮形式 -ms 圧縮せずにそのまま格納します。 n: 新しいファイルのみ解凍 ------------------------- 解凍する際に、解凍先フォルダに既に同じ名前のファイルが存在する場合 に、ファイルの作成日時を比較して、新しいもののみを解凍します。 例 -x -n -i -j test.cab c:\ *.doc o: 無条件に上書き解凍 --------------------- 解凍する際に、解凍先フォルダに既に同じ名前のファイルが存在しても 強制的に上書き解凍します。 例 -x -o -i -j test.cab c:\ *.doc q: 8+3のDOSファイル名形式で格納 ------------------------------- 指定されたファイルを書庫に格納する際に、長い名前を8+3形式の短い名前 に置き換えて格納します。 r: サブフォルダも検索 --------------------- 格納すべきファイルの指定にフィルタが指定されていた場合、フィルタ に一致するフォルダの階層下に含まれるフォルダも再帰的に検索して キャビネットに格納します。 v: マルチボリュームでキャビネットを作成 --------------------------------------- ボリュームサイズで指定されたサイズでキャビネットファイルを作成 します。作成するキャビネットファイルは、自動的に連番が付与されます。 例えば、作成するキャビネットファイル名に "test.cab" が指定されれば、 ボリュームサイズ毎に "test1.cab", "test2.cab", "test3.cab", ... と 命名されます。 ボリュームサイズは、キロバイトの単位(1KBは1024バイト)で指定がで きます。指定のフォーマットは以下の通りです。 v: 例 -a -r -v:1423 test.cab c:\ @resp_name この場合、resp_name で指定されたレスポンスファイルを参照して、 c:\ を基準フォルダをして、キャビネットファイルを作成します。 キャビネットファイルは 1,423KB(1.44MBフロッピーのサイズ)に分割され、 それぞれ "test1.cab", "test2.cab", ... と命名されます。 なお、マルチボリュームで作成されたキャビネットに格納されるファイル は、そのファイルの圧縮されたサイズにより、複数のキャビネットにまた がって1つのファイルが格納される場合があります。 例えばボリュームサイズに1.44MB(1423KB)を指定したときで、ある大きな サイズのファイルを圧縮しても1.44MBサイズに収まらない場合には、この ファイルは複数のキャビネットにまたがって圧縮データが記録されるわけ です。 実際にこのファイルを解凍する場合には、最初に記録されたキャビネット から、格納されているキャビネットを順次たどって解凍されることとなり ます。 w: 正規表現を利用 ----------------- 書庫にファイルを格納/書庫からファイルを解凍する際に指定するフィルタ を正規表現として扱います。 この指定がない場合には、通常のフィルタ(ワイルドカード)とみなして 処理をおこないます。 なお、CabFindFirst/CabFindNextを呼び出すときに指定するフィルタは 通常のフィルタとして扱い、正規表現を利用できませんので注意が必要です。 y[s|e]: 日時指定 ----------------------------------- 更新日時を YYYYMMDD[hh[mm[ss]]] 形式で指定します。 ysスイッチは指定日時以降、yeスイッチは指定日時以前のファイルを対象と します。ysとyeを同時に指定することにより、一定期間に更新されたファイル を対象とすることもできます。 なお、時刻部hhmmssは省略可能です。時刻部が省略された場合、ys指定の 場合には 00:00:00 で補完し、ye指定の場合には 23:59:59 で補完されます。 例 -a -r -ys19991201000000 -ye19991231 cab_name *.* 1999/12/01 00:00:00 以降 1999/12/31 以前の更新日時を持つ ファイルを格納する。 zs: 無圧縮格納するファイルのフィルタ指定 ---------------------------------------- 書庫にファイルを格納する際に、無圧縮で書庫に格納するファイルをフィルタ で指定します。w オプションが指定されていれば、このフィルタは正規表現と して扱われます。フィルタは';'(セミコロン)で区切って複数指定可能です。 例 -a -r -zs*.cab;*.zip;*.lzh cab_name *.* *.cab, *.zip, *.lzh のフィルタに合致するファイルは無圧縮でそのまま 書庫に格納する。 ze: 格納しないファイルのフィルタ指定 ------------------------------------ 書庫にファイルを格納する際に、格納対象からはずすファイルをフィルタで 指定します。w オプションが指定されていれば、このフィルタは正規表現と して扱われます。フィルタは';'(セミコロン)で区切って複数指定可能です。 例 -a -r -ze*.bak;*.tmp cab_name *.* *.bak, *.tmp のフィルタに合致するファイルは書庫に格納されない。 4.基準ディレクトリについて =========================== 基準フォルダは、圧縮・展開するファイルのフォルダの取り扱いを、現在いる ドライブ・フォルダを、そこに移動してから処理を行ったときと同じにします。 例 -a -r cab_name "c:\Program Files\" Plus!\*.* c:\Program Files を基準フォルダとして Plus! フォルダ配下のファイル を格納する。 5.レスポンスファイル ===================== CAB32.DLL に渡せる文字列には限界がありますので、たくさんのファイルを 一度に指定することができません。そのため、LHA.EXE と同様にレスポンスファ イルが使えるようになっています。 レスポンスファイルは、先頭に '@' を付けて区別します。 ファイルの内容はコマンドラインに書く書式と同じです。複数行に分けて書いて も構いません。その場合、改行文字はパラメータのセパレータとして機能します。 ファイル中には、命令やスイッチを記述することはできません。 また、レスポンスファイルの中から他のレスポンスファイルを呼び出す(多重ネ ストする)ことはできません。 この場合には '@' で始まるファイル名として認識さ れます。 6.フィルタおよび正規表現について ================================= ファイル名の指定は、Unix の egrep などで使用されているものと同等の、強力な 正規表現を使用することができます。(スイッチオプション -w) そのため大文字と小文字も区別していました。しかし Win95/98/NT では過去との 互換性のために、大文字と小文字を区別してファイルに命名出来るにも関わらず、 ファイル名としては区別していません。 また、正規表現を扱うブラケット内では、全角文字も1文字として判定します。 このため、"[あ-ん]*" などのような指定であれば、'あ'で始まるファイル名から 'ん'で始まるファイル名までをマッチさせることも可能です。 * 0個以上の任意の文字とマッチします。 ? 1個の任意の文字とマッチします。 [...] [ ]内のどれかの文字1字とマッチします。 [ ]内では、そのまま列記した場合は個々の文字が、A-F のように - で 二つの文字をつなげた場合はその範囲(この例では A から F までの文字) 内の文字をすべてを指定します。 ! や ^ が [ の次にあると否定(すなわち「それ以外」)を示します。 なお、現在は漢字等の全角文字はサポートしていません。使わないで ください。 \ "[]"自体をファイル名の一部として指定したり、上記で [] 内で使用する ^- の文字を本来の意味で使用するためのエスケープ文字です。 例: [0-9a-zA-Z_] 英数字と _(アンダーライン)とマッチ。 [a-zA-Z]*[/\\] 英数字で始まり、最後が / か \ で終わっている名前。 注: 文字「.」(ピリオド)には特別な意味はありません。したがって、*.* は MS-DOS での意味とは異なり、拡張子があるファイルとしかマッチしません ので注意してください。 同様に、全てのファイルとマッチするのは「**」ですが、DOSとの互換性を 考慮して、特別に「*.*」の場合だけ内部で「**」に置き換えてます。 7.制限事項 ===================== (1) コマンドラインパラメタ数 256個のコマンドラインでのパラメタ数を最大限許します。これを超えるパラメタ を指定するには、レスポンスファイルを利用してください。レスポンスファイル を利用すれば、DLLが扱えるメモリ許容量までパラメタを指定できます。 1つの書庫に格納できるファイル数には制限はありません。 (2) 作成可能なキャビネットサイズ 作成できるキャビネットの最大サイズは、(2ギガ - 1)バイトまでです。 圧縮して格納されたサイズがこのサイズを超えると、マルチボリューム指定され ていなくても自動的にマルチボリューム形式に変更されます。 8.環境変数 =========== (1) "TEMP" 作業ファイルを作成するディレクトリを指定します。システムが認識している ワークフォルダに従うようになっています。 9.作業ファイル名 ================= xx000, xx001 〜 xx999 と代えて検索し、そのフォルダに存在しないファイル名 を作業ファイル名として使用します。 10.レジストリの設定値 ===================== HKEY_CURRENT_USER\\Software\\ArchiverDll\\Cab32 CompressionMode : REG_DWORD 圧縮方法の指定。 0 : MSZIP (デフォルト) 1 : LZX "-ml" を指定した場合と同じ。 LzxCompressLevel : REG_DWORD LZX圧縮が指定された場合の圧縮レベル。 15 〜 21 の数値 デフォルトは 21 ==========================================================================