I’ve enclosed a simple PowerShell script to recursively zip files using the built in shell. Works in PowerShell 2 and 3, no additional zip applications to install. I use this very useful script to tidy up a folder of trace files or backup files. To zip all files, remove the Include from the Get-ChildItem command.
# example: .\Zip-Recursively.ps1 c:\Temp\Test trc $filePath = $args[0]; $Ext = $args[1]; if($filePath.Length -lt 3) { Write-Host "Enter a path name as your first argument" -foregroundcolor Red return } if($Ext.Length -lt 1) { Write-Host "Enter a file extension as your second argument" -foregroundcolor Red return } if(-not (Test-Path $filePath)) { Write-Host "File path does not appear to be valid" -foregroundcolor Red return } $files = Get-ChildItem $filePath -Include *.$Ext -recurse foreach($file in $files) { $fileZipName = $file.Name; if (-not $fileZipName.EndsWith('.zip')) { $fileZipName += '.zip' } $fullFilePath = $filePath + "\" + $fileZipName # Prepare the zip file set-content $fullFilePath ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) $shellApplication = new-object -com shell.application $zipPackage = $shellApplication.NameSpace($fullFilePath) $zipPackage.CopyHere($file.Fullname) # Checks each file to make sure it is added before moving to the next file while($zipPackage.Items().Item($file.name) -eq $null){ Start-sleep -seconds 1 } # Delete the file Remove-Item $file.Fullname ; $fullFilePath }