2013-10-16 74 views
14

ディレクトリにファイルがたくさんある。私はmakecabに従ってみましたが、フォルダ内のすべてのファイルをcabファイルに含めません。makecab - フォルダ内のすべてのファイルからcabファイルを作成する

makecab /d "C:\Users\crtorres\Documents\- SouthPacific Project 2014\- Projects\Sales Doc Center\New Region" test.cab 

cabファイルにはマニフェストファイルしかありません。 makecabのmanifest.xml test.cab

答えて

12
スイッチは、ファイルに使用することはできません

/D:

@echo off 
dir /s /b /a-d >files.txt 
makecab /d "CabinetName1=test.cab" /f files.txt 
del /q /f files.txt 

More info

hereは、全体のディレクトリ構造を維持するスクリプトを見つけることができEDIT

+0

"files.txt" のいくつかのケースファイルのパスおよび名前でも同様に "files.txt" に追加されます。次に、files.txtもtest.cabに格納されます。 – Hinek

22

実際にこれを正しく実行できるスクリプトを作成しました(powershellを使用)

WSPBuilderは契約していないことが多く、新しいソフトウェア/追加ファイルをダウンロードするのは不便です。これはOOTBで動作します。

function compress-directory([string]$dir, [string]$output) 
{ 
    $ddf = ".OPTION EXPLICIT 
.Set CabinetNameTemplate=$output 
.Set DiskDirectory1=. 
.Set CompressionType=MSZIP 
.Set Cabinet=on 
.Set Compress=on 
.Set CabinetFileCountThreshold=0 
.Set FolderFileCountThreshold=0 
.Set FolderSizeThreshold=0 
.Set MaxCabinetSize=0 
.Set MaxDiskFileCount=0 
.Set MaxDiskSize=0 
" 
    $dirfullname = (get-item $dir).fullname 
    $ddfpath = ($env:TEMP+"\temp.ddf") 
    $ddf += (ls -recurse $dir | ? {!$_.psiscontainer}|select -expand fullname|%{'"'+$_+'" "'+$_.SubString($dirfullname.length+1)+'"'}) -join "`r`n" 
    $ddf 
    $ddf | Out-File -encoding UTF8 $ddfpath 
    makecab /F $ddfpath 
    rm $ddfpath 
    rm setup.inf 
    rm setup.rpt 
} 

私が何か間違っている、より良いことがあるかどうか教えてください。参考のため

http://www.pseale.com/blog/StrongOpinionSayNoToMAKECABEXE.aspx

+7

これは美しいですが、用途: Open PowerShell; この関数をPowerShellに貼り付けます。 Enterキーを押します。 compress-directory。\ some-dir-to-compress。\ filename.cab – turiyag

+1

誰かがこの古い投稿にまたがって走っているかどうかを知っておくだけの使い方です。宛先にはリテラルパスは使用されません。回避策として、場所をプッシュ/ポップすることができます。コマンドは "compress-directory c:¥temp。¥temp.cab"のようになります。
さらに、cabファイルには2ギガバイト〜512バイトを超える問題があります。追加オプションとして、圧縮タイプLZXを代替として設定することもできます。 – Lorek

関連する問題