$charA = [int][char]'A' $charL = [int][char]'L' $charM = [int][char]'M' $charZ = [int][char]'Z' $rangeFirst = $charA..$charL $rangeSecond = $charM..$charZ $pathRoot = "/zfs/data/videos/Movies" $pathFrom = "/zfs/data/videos/MovieDrop" $movies = Get-ChildItem -Path $pathFrom foreach ($movie in $movies) { $name = $movie.Name.Trim() if ($name -match "^A ") { $name = $name.Substring(2).Trim() } elseif ($name -match "^An ") { $name = $name.Substring(3).Trim() } elseif ($name -match "^The ") { $name = $name.Substring(4).Trim() } $letter = $name[0] $nameSecondChar = [int][char]($name.ToUpper()[1]) $letterPair1 = "$letter-$($letter)L" $letterPair2 = "$($letter)M-$($letter)Z" $targetFolder = $null if ($nameSecondChar -in $rangeFirst) { $targetFolder = $letterPair1 } elseif ($nameSecondChar -in $rangeSecond) { $targetFolder = $letterPair2 } else { # handle the case where the title is like "I, Robot" or "O.M.G." or similar $targetFolder = $letterPair1 } if ($letter -match '\d') { # The title starts with a numeric character $targetFolder = "00-99" } $targetPath = Join-Path -Path $pathRoot -ChildPath $targetFolder Write-Host "Move-Item -Path '$($movie.FullName)' -Destination '$($targetPath)'" Move-Item -Path $movie.FullName -Destination $targetPath -Force -ErrorAction Continue | Out-Null } chown cbrand:users $pathRoot