1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

windowsコマンドのmakecabメモ

Last updated at Posted at 2021-08-13

makecabのヘルプオプションは英語表記で分かりにくいし、インターネット上の情報も少なかったので、ここで試行錯誤のメモを残す。

makecabで圧縮したcabファイルをexpandで展開したときのエラー0x80070032

c:\>expand hoge.cab -F:* .
Microsoft (R) File Expansion Utility
Copyright (c) Microsoft Corporation. All rights reserved.


ファイル hoge.cab の解凍は完了していません。エラー コード = 0x80070032
エラーの説明: この要求はサポートされていません。

【原因】
どうやらmakecabが出力するcabファイルのサイズの初期値はそれほど大きくないらしい。
合わせて数M程度のファイル群であっても、規定サイズを超えた部分を切り捨てたcabファイルを作り、これをexpandしようとしてもファイルが変だよと0x80070032を返した模様。

【対策】
MaxDiskSize変数で最大値を指定する。
makecab /D MaxDiskSize=1024000000
とコマンドラインのDオプションで指定してもよいし、
ddfファイルを使うならば、その中に
.Set MaxDiskSize=1024000000
と書いてもいい。

ファイル階層構造の指定の仕方。

ddfファイルを使う。
例えば、
uno\dos\tres.dll
uno\cuatro\cinco.inf
uno\seis ciete\ocho.exe
という階層構造のファイルを圧縮し、解凍したら再現したい場合。

.Set DestinationDir=uno\dos
uno\dos\tres.dll
.Set DestinationDir=uno\cuatro
uno\cuatro\cinco.inf
.Set DestinationDir="uno\seis ciete"
"uno\seis ciete\ocho.exe"

DestinationDir変数で作成して欲しいフォルダ名を指定する。
スペース等が入ったパスの場合は、例のごとくダブルクォテーションで囲う。

setup.infとsetup.rtn(makecabの実行ログ)

makecabを実行するとデフォルトではsetup.infとsetup.rtnを出力する。
これを抑止するにはRptFileName、InfFileName変数を使う。
コマンドラインであれば
/D RptFileName=NUL /D InfFileName=NUL
DDFファイルであれば
.Set RptFileName=NUL
.Set InfFileName=NUL
など。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?