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