Find all rar files in a folder and child folders. Then use the Extract-RAR-File function to decompress and remove the rar files.
Script notes
The rar files are matched using the regular expression ".*(?:(?<!\.part\d\d\d|\.part\d\d|\.part\d)\.rar|\.part0*1\.rar)". This could be improved as it matches all rar files and not just the first one is a set. I forget where found this regexp, Thanks to those who wrote it.
I excluded rar files in folders named trash as these have already been extracted.
function Extract-RARs-in-Folder([string]$Folder) { <# .Synopsis Extracts all the rar files in the folder .Description .Example Extract-RARs-in-Folder C:\temp\ would extract C:\temp\foo.rar and C:\temp\bar.rar .Parameter Folder Path of folder to be processed .Link http://heazlewood.blogspot.com #> #reference to source folder $basketFolder = get-item -LiteralPath $Folder #Search the basket folder for any rar files $rarFiles = get-Childitem -LiteralPath $basketFolder.FullName -recurse | where{$_.Name -match ".*(?:(?<!\.part\d\d\d|\.part\d\d|\.part\d)\.rar|\.part0*1\.rar)"} foreach ($rarfile in $rarFiles) { #if none are found an empty object is returned filter these by checking if the object exists if ($rarfile.Exists -eq $true) { write-verbose "processing matched rar : $($rarfile.Name)" if ($rarfile.Directory.Name -ne "Trash" ) { #this is a hack needed because I remove or move rar files in the Extract-RAR-File function. #regexp should be updated to only match on the first file of a span so this is not needed if (Test-Path $rarfile.Fullname ) { $result = Extract-RAR-File $rarfile.FullName $true } } else { write-verbose "skipping item due to folder name$($_.FullName)" } } } }
No comments:
Post a Comment