[makecab]コマンドラインからCABファイルを作成する方法

最近CABファイルを作成することがあったので、やり方をまとめました。

一つのファイルを圧縮する

makecab a.txt b.cab

makecab [圧縮するファイル名] [圧縮後のファイル名]というコマンドになります。

この例ではカレントディレクトリにb.cabが作成されます。[圧縮後のファイル名]をコマンドに含めないで下記のように、

makecab a.txt

という更にシンプルなコマンドでも圧縮は可能なのですが、拡張子の最後の文字列がアンダースコアに置き換わった謎のファイル(上の例ならa.tx_)が出力されてしまいます。実態はCABファイルなので拡張子を.cabに変更すれば良いだけですが、最初のコマンドを使った方が手間が掛からなくて楽ですね。近道は遠道です。

そうそう、コマンドプロンプトでは「スペースが含まれている文字列はダブルコーテーションで括る」というルールがありますので気をつけましょう。あまり融通の利かない言語のスクリプトでバッチを使おうとすると、これが地味に効いてくることがあります。

一つのファイルを圧縮する(出力フォルダを指定)

makecab /L c a.txt b.cab

makecab /L [出力フォルダ名] [圧縮するファイル名] [圧縮後のファイル名]というコマンドになります。この例ではフォルダcにb.cabが作成されます。指定したフォルダが存在しない場合は新しくフォルダが作成されます。

複数のファイルを圧縮する

複数のファイルを圧縮する場合は、圧縮するファイル名や命令を記述したリストファイルを別途作成し、そのファイルをコマンドで指定するという流れになります。リストファイルは本来.ddfという拡張子を使うようですが、単なるテキストファイルでも良いですしメモ帳で作成できます。下記がリストファイルの記述例です。

.Set CabinetNameTemplate=test.cab
.Set DiskDirectoryTemplate=
a.txt
.Set DestinationDir=c
b.txt

1行目が出力ファイル名、2行目は出力ディレクトリを指定しています。ファイル名のみの3行目と5行目は圧縮するファイルの指定ですが、間の4行目がフォルダを作成する命令なので、5行目のb.txtはフォルダ階層が1段下がります。

オプション

リスト中で使用できるオプションの説明です。

.Set
オプションを宣言するときに必要なキーワードです。


CabinetNameTemplate
圧縮後のファイル名を指定するオプションです。このオプション自体が無い場合は1.cabが作成されます。値を空にするとエラーになります。


DiskDirectoryTemplate
出力フォルダを指定するためのオプションです。値が空の場合はカレントディレクトリに出力されます。このオプション自体が無い場合はDisk1というフォルダが新たに作成され、その中に出力されます。


DestinationDir
既存のフォルダを指定するのではなく、フォルダ階層を作成するオプションです。値はフォルダ名です。


セミコロン
コメントアウトします。

階層を下げるところが一癖あるので図にしてみました。前述のリストで出力されるCABファイルは下のようなフォルダ階層になります。

test.cab
│
├a.txt
│
└フォルダc
 │
 └b.txt

コマンドは下記のようになります。ここでは、前述のリストをlist.txtという名前でカレントディレクトリに作成したことにします。

makecab /F list.txt

makecab /F [リストファイル名]というコマンドになります。

CABファイルを固定サイズで分割して出力する

さっきと同じでリストファイルを作成し、makecab /F [リストファイル名]のコマンドを使用しますが、リストファイルの書き方が少し変わります。下記が記述例です。

.Set CabinetNameTemplate=User*.cab
.Set DiskDirectoryTemplate=test
.Set Cabinet=on
.Set MaxDiskSize=1024
a.txt
.Set DestinationDir=b
c.txt
.Set DestinationDir=d
e.txt

オプション

リスト内で使用できる分割オプションの説明です。

CabinetNameTemplate
分割するときは必ずワイルドカードを使用します。この例の場合はUser1.cab、User2.cab ... と連番のファイルが作成されます。


Cabinet=on
分割を行うときの必須オプション。このオプションが無いと分割されません。


MaxDiskSize
単位はbyteです。何バイト区切りで分割するかというオプションになります。

ファイル名のワイルドカードを忘れてしまうと分割する度にファイルを上書きするので、最後に分割されたファイルのみがぽつんと残ります。それから、分割時に必須なオプションのCabinet=onですが、Cabinet=offというオプションは存在しませんので注意してください。分割しないからとCabinet=offを付けるとエラーになります。

この例ではフォルダ階層は下記のようになります。

test\User1.cab
│
├a.txt
│
└フォルダb
 │
 ├c.txt
 │
 └フォルダd
  │
  └e.txt

まとめ

とりあえず、リストファイルを作ってmakecab /F [リストファイル名]のコマンドを使っておけば間違いないです。

やむを得ない理由でリストファイルが使えない場合は、/D [オプション]とすればリストファイル内で使用したオプションをコマンドで使用できます。

参考にしたサイト

記事中で使用しなかった他のオプションについても書かれていて、CABファイルについての基本から応用までわかりやすく説明されています。このページは読んでおいて損は無いです。

キャビネット形式を使おう
http://www.syuhitu.org/other/makecab.html

お知らせ

現在お知らせはありません。

最近の投稿

シェア