troubleshooting Question

Powershell Scripting help for sorting files into directories

Avatar of bts86
bts86 asked on
PowershellRegular Expressions
3 Comments1 Solution131 ViewsLast Modified:
I have an existing script that someone wrote for me that takes phone recording files from one  location where all the files are dumped and sorts them into many sub directories. The information for sorting them is all within the file names.

They currently go by Extension\date\(Incoming or Outgoing)

The extension directories are growing quite large making it hard to find the day you are looking for.

I need to modify this to split the date into directories for year\month\day

So and incoming call today would end up like this ...\Ext-201\2017\10\30\incoming\filename.mp3

Filenames are formatted like this:
20170516_041636PM_From-9145555555_To-201_Ext-201.mp3 (this is an incoming call)
20170516_013713PM_From-201_To-9145555555_Ext-201.mp3 (this is an outgoing call)

Here is what I currently have:
param ( [string]$p1 )

# Set source directory to Incoming FTP directory
$SourceFolder = "E:\FTP\$p1"

#Set target directory where the organized folders will be created
$TargetRoot = "E:\Recordings\$p1"

$Pattern = '(?<Date>\d{8})_(?:.*?)_From-(?<From>[^_]+)_To-(?<To>\d+)_Ext-(?<Ext>\d+)'
Get-Childitem -Path $SourceFolder -Filter *.mp3 | ForEach-Object {
	Write-Host "Processing '$($_.Name)'" -NoNewline
	If ($_.BaseName -match $Pattern) {
		$CallType = If ($Matches['From'] -eq $Matches['Ext']) {'Outgoing'} Else {'Incoming'}
		$TargetFolder = "$($TargetRoot)\Ext-$($Matches['Ext'])\$($Matches['Date'])\$($CallType)"
		Write-Host " --> '$($TargetFolder)'"
		If (-not (Test-Path -Path $TargetFolder)) {
			New-Item -Path $TargetFolder -ItemType Directory | Out-Null
		}
		Move-Item -Path $_.FullName -Destination $TargetFolder
	} Else {
		Write-Host ""
		Write-Warning -Message "File '$($_.Name)' does not match the expected pattern."
	}
}

Thanks in advance for any help.
ASKER CERTIFIED SOLUTION
Panagiotis Toumpaniaris
System Architect

Our community of experts have been thoroughly vetted for their expertise and industry experience.

Join our community to see this answer!
Unlock 1 Answer and 3 Comments.
Start Free Trial
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 1 Answer and 3 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros