========================================================================== Bga32.dll version 0.37 コマンド説明ファイル 木村 利靖 Toshinobu Kimura ========================================================================== 0. はじめに 1. コマンドラインの様式 2. 命令の詳細 3. スイッチオプションの詳細 4. 基底ディレクトリについて 5. 作業ファイル名 6. 書庫の形式 -------------------------------------------------------------------------- 0. はじめに =========== Bga32.dll では、独自形式の書庫 .GZA、.BZA ファイルに関して、次の操作が 可能です。 (1) 書庫を新規に作成する( マルチボリュームファイルは作成できません ) (2) 既存の書庫へファイルを後から追加する( 移動も可能 ) (3) 既存の書庫に格納されているファイルを新しいファイルで更新する (4) 既存の書庫に格納されているファイル名を変更する (5) 既存の書庫に格納されているファイルを個別に削除する (6) 既存の書庫から指定( あるいは全て )のファイルを解凍する (7) 既存の書庫に格納されているファイルの情報を取得する (8) 自己解凍形式書庫を作成する 1. コマンドラインの様式 ======================= [] [-...] [.GZA|BZA] [\] [[||]...] command 及び switch は大文字・小文字を区別しません。 command はコマンドラインの最初の引数としてください。なお、command を省略 した場合は 'x' command が指定されたものとみなします。 switch の位置については、その指定位置を問いません。'-' につづいて指定された 文字を switch とみなします。複数の switch を指定する場合には switch ごとに 分けて '-' で指定してください。 BgaConfigDialog() で指定されている switch を無効にするには switch 文字の後に '-' を記述します。 例えば r switch を無効にするには "-r-" とします。 無効にできる switch は a、i、j、n、o、r の各 switch です。 コマンドラインの command、switch 以外の最初の文字列を archive_file_name と みなします。archive_file_name は省略できません。 archive_file_name にはワイルドカードが指定できますが、'a', 'd', 'm', 'n' の 各 command 時には、ワイルドカードは使用できません。 書庫を新規に作成する場合には archive_file_name の指定で拡張子を省略できます が、省略する場合には '-m' switch で書庫の種別を指定する必要があります。 また、ひとつの書庫での圧縮種別は統一されなければなりません。既存の書庫への 追加圧縮時には、指定された拡張子や '-m' switch での指定にかかわらず、既存の 書庫と同一の種別で圧縮します。 前提として、書庫の拡張子が ".GZA" であれば GZIP で圧縮した書庫、".BZA" なら BZIP2 で圧縮した書庫と仮定します。ただしこれは既定値であり、他の拡張子を 指定してもかまいません。このときには '-m' switch で書庫の種別を指定します。 ただ、別の拡張子を使用した場合には見た目で書庫かどうかの判断がつきにくく なりますのであまりお勧めしません。 なお、自己解凍形式書庫を指定する場合には拡張子は省略できません。 base_directory_name( 基底ディレクトリ )はひとつだけ指定できます。 base_directory_name を指定する場合には、パス名を必ず '\' で 終わらせて指定しなければなりません。 base_directory_name を省略した場合には、カレントディレクトリを基準にします。 || には操作を行うパス名またはファイル名を 指定します。 path_name の形式で指定すると、指定のディレクトリを含めて書庫に格納します。 file_name の形式で指定すると、指定のファイルを書庫に格納します。 最初の文字が '@' であれば、それに続くファイル名をレスポンスファイルとして 扱います。 レスポンスファイルにファイルリストを記述する場合には、テキスト1行に1 ファイルづつ記述するか、1行に複数のファイルを納める場合には、各ファイル 名は空白( 0x20 )で区切ります。ファイル名自体に空白が含まれる場合には、 そのファイル名は '"' (ダブルクォーテーション) で括らなくてはなりません。 また、1行に記述できるファイルのリストは、文字列長で1024バイト未満です。 複数行で指定する場合には、1行の限度は上記のとおりですが、行数の限度は ありません。 なお、レスポンスファイルには switch や base_directory_name は記述でき ません。また、レスポンスファイル中にレスポンスファイルを呼び出すような 記述もできません。この場合には '@' で始まるファイル名として認識されます。 wild_name は MSDOS の慣習に従います。"*.*" は全てのディレクトリ、ファイルを 意味します。"*.DOC" は ".DOC" の拡張子を持つファイルを意味します。"?A*.*" は2文字目に 'A' を持つファイルを意味します。 || がない場合は "*.*" が指定されたものと みなします。 スペースを含むファイル名のファイルを扱いたい場合は '"' で括るようにしま す。括られていない場合は複数の文字列と判断されます。'"' で括る際は、以下 の例における switch 指定のようにパラメータ全てを括るようにしてください。 例 : n c:\test.bza "Original Name.txt" "-fChange Name.txt" 2. 命令の詳細 ============= a: 書庫にファイルを追加 ----------------------- ファイルを圧縮して書庫に追加します。書庫が存在しなければ新しく作成 します。書庫の中に同じ名前のファイルがある場合は、無条件に上書きで 圧縮します。ただし "-n" switch が指定されていれば日付の新しいファイル だけを更新します。 "-r" switch が指定されていれば、指定されたワイルド名に合致する ようなサブディレクトリのすべてのファイルを追加します。 例: a -r archive subdir\ *.* subdir\ 以下のすべてのファイルを圧縮して格納 d: 書庫からファイルを削除 ------------------------- 書庫からファイルを削除します。指定されたファイルは書庫から物理的に 削除します。このときファイル毎に削除確認を行ないます。 ただし、"-i" switch を指定すれば、削除確認を行いません。 例: d archive *.c ".c" で終わるファイルを確認付きで削除 j: 自己解凍書庫を通常の書庫へ変換 --------------------------------- 既存の自己解凍書庫を通常の書庫へ変換します。 通常の書庫は、指定した自己解凍書庫の拡張子( .exe )を書庫の形式に応じて .bza か .gza に変更した名前で作成します。 すでに同名の書庫が存在する場合は無条件に置換しますので注意が必要です。 例: j archive.exe c:\tmp\ archive.exe を変換して C:\TMP 上に通常の書庫 archive.bza または archive.gza を作成。 l: 書庫の内容を短い形式で一覧表示 --------------------------------- 書庫の格納ファイルの一覧を表示( szOutputに出力)します。 m: 書庫にファイルを移動 ----------------------- 'a' command と同様にファイルを圧縮して書庫に追加しますが、追加の後、 追加されたファイルを削除します。 ただしディレクトリは削除しません。 n: 書庫の中のファイル名の変更 ----------------------------- 書庫に格納されているファイル名を変更します。選択されたファイル毎に 新しいファイル名を催促します。 キャンセルすると、そのファイルについてはファイル名を変更しません。 '/' の文字を使用することにより、ディレクトリ情報の埋めこみや変更が 行えます。また、長いファイル名やスペースを含んだファイル名の入力も 可能です。 例: n archive file1 archive 内の file1 というファイル名を変更します。 s: 自己解凍書庫の作成 --------------------- 既存の通常書庫から自己解凍書庫を作成します。 例: s archive c:\tmp\ archive を変換して C:\TMP 上に自己解凍書庫 archive.exe を作成。 t: 書庫の検査 ------------- 選択されたファイルのヘッダを検査します。 圧縮データの正当性はチェックしません。 v: 書庫の内容を長い形式で一覧表示 --------------------------------- 書庫の格納ファイルの一覧を表示( szOutputに出力)します。 x: ファイルを展開 ----------------- 書庫から1個以上のファイルを、カレントディレクトリか、指定されていれば 基底ディレクトリに展開します。 "-n" switch が指定されていれば日付をチェックして新しいファイルだけを 解凍します。また、"-o" switch が指定されていれば、同じ名前のファイルが あれば無条件に上書きします。 "-n" switch も "-o" switch も指定されていなければ、既に存在するファイル に上書きする前にユーザに確認します。(1)上書き、(2)新しいファイルのみ、 (3)上書きしない の3つから処理を選択できます。 3. スイッチの詳細 =========================== -: レスポンスファイル文字の指定 ------------------------------- 例えば --! とすると、以降では !resp という形式でレスポンスファイルを指定す ることになります。単に -- とだけ指定すると、レスポンスファイルを使用できな くなります。 a: 全属性を圧縮・解凍の対象とする --------------------------------- デフォルトでは、リードオンリー属性のついたファイルはそのまま格納 しますが、隠し属性・システム属性のついたファイルを格納しません。 この switch を指定すると、隠し属性・システム属性のついたファイルも 格納するようになります。 また、単独のディレクトリ名も格納します。ただしディレクトリ名のメンバを 作成するには、 a -a archive c:\ tmp\*.* ではなく、 a -a archive c:\ tmp のように指定する必要があります。 なお、この switch は解凍時にも有効です。 解凍時に指定すると、隠し属性・システム属性のついた格納ファイルも解凍 します。また、格納されている空のディレクトリも解凍します。 f[<ファイル名>]: 変更ファイル名を供給 ------------------------------------- 'n' command 時には変更するファイル名をユーザが指定するダイアログを表示 しますが、この switch を指定することにより、コマンドラインから直接 ファイル名を指定できます。格納ファイルの指定にワイルドカードを使った 場合、マッチしたすべてのファイルが同じ名前に変更されてしまうので、 注意を要します。 個別に変名を行いたい場合には BgaSetEnumMembersProc() を使用してください。 例: n archive file1 -fChangeName.TXT "file1" を "ChangeName.TXT" に変更する。 n archive file2 "-fChange Name.TXT" "file2" を "Change Name.TXT" に変更する。 i: サイレントモード ------------------- 書庫の作成・解凍時に、進捗状況を示すウィンドウを表示しません。 'd' command 時には削除の確認を行わなくします。 例 x -i -j archive c:\ *.cpp j: ディレクトリを無視して解凍 ------------------------- 書庫にパス名とともに格納されているファイルを、パス名を無視して、 基底ディレクトリへ解凍します。 例 x -j archive c:\ *.* l: 圧縮レベルの指定 ------------------- 圧縮時の圧縮レベルを指定します。1 - 9 で指定できます。 一般に数値が小さいほど処理速度は速くなりますが圧縮率は低下し、 大きくなるほど処理速度は遅くなりますが圧縮率が上がります。 デフォルトは '9' です。 ※BZIP2 形式の場合、圧縮するファイルによっては、レベルが小さいほうが 圧縮率が良いこともあるようです。 例 a -l6 archive c:\temp\ *.* m: 圧縮方式の指定 ----------------- 書庫を新規作成するとき、archive_file_name の指定で拡張子を省略した場合、 圧縮方式を GZIP にするか BZIP2 にするかを指定します。 archive_file_name の指定に有効な拡張子が含まれていればこのオプションは 無視します。また、既存の書庫に対する操作時にも無効です。 -m1 : GZIP で圧縮 -m2 : BZIP2 で圧縮 n: 新しいファイルのみ圧縮・解凍 ------------------------------- 圧縮する場合には、書庫内に同じ名前のファイルが存在する場合に、 ファイルの更新日時を比較して、新しいもののみを圧縮して置き換えます。 解凍する場合には、解凍先ディレクトリに既に同じ名前のファイルが存在する場合 に、ファイルの更新日時を比較して、新しいもののみを解凍します。 例 x -n archive c:\ *.doc o: 無条件に上書きで解凍 ----------------------- 解凍する際に、解凍先ディレクトリに既に同じ名前のファイルが存在しても 強制的に上書き解凍します。 例 x -o archive c:\ *.doc r: サブディレクトリも検索 --------------------- 格納すべきファイルの指定にワイルドカードが指定されていた場合、ワイルド カードに一致するディレクトリの階層下に含まれるディレクトリも再帰的に検索し て書庫に格納します。 このスイッチは解凍時にも有効です。 4. 基底ディレクトリについて =========================== 基底ディレクトリは、ファイルを圧縮・展開する際に基準とするディレクトリです。 これを指定することで、対象とするすべてのファイルにパスを記述する必要が なくなります。 例1 a arc_file "c:\Program Files\work\" file1.txt file2.txt c:\Program Files\work 配下の file1.txt と file2.txt を格納する。 この場合、格納情報には work ディレクトリは含まれません。 例2 a -r arc_file "c:\Program Files\" work\file1.txt work\file2.txt c:\Program Files 配下の work\file1.txt と work\file2.txt を 格納する。 この場合、格納情報には work ディレクトリが含まれます。 5. 作業ファイル名 ================= 圧縮や解凍時に、テンポラリディレクトリに Bga00tmp.tmp というファイルを作成 します。 通常は作業の終了時に削除しますが、不正終了してしまった場合などには残骸が 残りますので、手動で削除してください。 6. 書庫の形式 ============= A) .GZA 対象ファイルをそれぞれ gzip で圧縮し、それぞれに Bga32.dll の独自 ヘッダを付加して結合しただけのファイルです。 test1.txt, test2.txt からひとつの書庫( test.gza )を作成する場合、 書庫作成の内部的な手順は以下のようになります。 1) 各ファイルを gzip で圧縮 : test1.txt -> test1.gz test2.txt -> test2.gz 2) 各ファイルに Bga32.dll の独自ヘッダを付加 : test1.gz -> header1 + test1.gz test2.gz -> header2 + test2.gz 3) すべての圧縮ファイルを結合して書庫を作成 : ( header1 + test1.gz ) + ( header2 + test2.gz ) -> test.gza B) .BZA 対象ファイルをそれぞれ bzip2 で圧縮し、それぞれに Bga32.dll の独自 ヘッダを付加して結合しただけのファイルです。 test1.txt, test2.txt からひとつの書庫( test.bza )を作成する場合、 書庫作成の内部的な手順は以下のようになります。 1) 各ファイルを bzip2 で圧縮 : test1.txt -> test1.bz2 test2.txt -> test2.bz2 2) 各ファイルに Bga32.dll の独自ヘッダを付加 : test1.bz2 -> header1 + test1.bz2 test2.bz2 -> header2 + test2.bz2 3) すべての圧縮ファイルを結合して書庫を作成 : ( header1 + test1.bz2 ) + ( header2 + test2.bz2 ) -> test.bza ※上記から判るように、.GZA、.BZA どちらも書庫ヘッダは保持しません。 そのため、MS-DOS の copy コマンドで複数の同一形式の書庫を結合して 新しい書庫を作成することができます。 ex) C>copy /b test1.bza+test2.bza test3.bza C>copy /b test4.gza+test5.gza test6.gza ただし、以下の例のように異形式を混在して結合した書庫は Bga32.dll の 現状の仕様に反しているため、以後この書庫に対する各種操作の正常な動作は 保証されません。ご注意ください。 C>copy /b test1.bza+test4.gza test7.bza ==========================================================================