I have bunch of files in a directory. I tried following makecab but it does not include all the files in a folder into the cab file.
makecab /d "C:\Users\crtorres\Documents\- SouthPacific Project 2014\- Projects\Sales Doc Center\New Region" test.cab
The following works but the cab file only has the manifest file. makecab manifest.xml test.cab
You can also click to select ZIP files using your operating system's file picker. Another method is to press the keyboard shortcut Ctrl+V (⌘+V on Mac) to paste a ZIP file you have copied to clipboard. Converting a folder with ZIP files to CAB is also supported: simply paste or drag and drop it.
To create a DIAGCAB file, use the Makecab.exe or Cabarc.exe tool. For details, see Microsoft Cabinet Format. The makecab.exe tool is located in the %Windir%\System32 folder. You should sign the cabinet file so if it is downloaded from the Web, the user knows that it came from a trusted source.
I've finally created a script that can actually do this properly (with powershell)
It doesn't use WSPBuilder as I'm often contracted out and it's inconvenient to download new software/extra files. This works 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 | where { !$_.PSIsContainer } | select -ExpandProperty FullName | foreach { '"' + $_ + '" "' + ($_ | Split-Path -Leaf) + '"' }) -join "`r`n"
$ddf
$ddf | Out-File -Encoding UTF8 $ddfpath
makecab.exe /F $ddfpath
rm $ddfpath
rm setup.inf
rm setup.rpt
}
please let me know if i'm doing something wrong and/or could be better.
for reference:
http://www.pseale.com/blog/StrongOpinionSayNoToMAKECABEXE.aspx
NOTE: Change made by Jerry Cote, see edit notes
/d switch cannot be used for files:
@echo off
dir /s /b /a-d >files.txt
makecab /d "CabinetName1=test.cab" /f files.txt
del /q /f files.txt
More info
EDIT here can be found a script that preserves the whole directory structure
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With