Powershell script to zip/rar files in subfolders and delete old ones
- Written by Boris Drajer
- Published in Tech blog
This is a slight change from the usual “pure programming” stuff, but I’ve been looking for a complete solution for this one and was unable to find it, so why not. A change of pace is good sometimes.
The problem is this: I have a script that backs up my database server. It creates one folder for each database and puts a new file into it every day. I want to rar each file (with a password), delete the original and delete all files in the folder except the two newest.
Here’s the script – you may recognize parts of it from other scripts, but unfortunately I can’t remember the URL’s where I picked these pieces up, sorry… Google around for solutions to this problem and you’ll probably find them.
#Powershell Script to recurse input path looking for .bak files, move them into a rar archive # and delete all archives in each folder except the newest two. $InputPath = $args[0] if($InputPath.Length -lt 2) { Write-Host "Please supply a path name as your first argument" -foregroundcolor Red return } if(-not (Test-Path $InputPath)) { Write-Host "Path does not appear to be valid" -foregroundcolor Red return } $BakFiles = Get-ChildItem $InputPath -Include *.bak -recurse Foreach ($Bak in $BakFiles) { $ZipFile = $Bak.FullName -replace ".bak", ".rar" if (Test-Path $ZipFile) { Write-Host "$ZipFile exists already, aborted." -foregroundcolor Red } else { & "C:\Program Files\WinRAR\winrar.exe" m -m1 -pyourpasswordhere "$ZipFile" "$Bak" | Out-Null if(Test-Path $ZipFile) { # Keep two newest files in the directory based on creation time $path = split-path $ZipFile -Parent $total= (ls $path).count - 2 # Change number 2 to whatever number of files you want to keep $path = $path + "\*.rar"; ls $path |sort-object -Property {$_.CreationTime} | Select-Object -first $total | Remove-Item -force } } }