function Rename-Files ($folder) { $files = dir $folder | where {! $_.PsIsContainer} # $files = dir $folder | where {! $_.PsIsContainer} | Select-Object -First 1 foreach ($file in $files) { $SplitName = $file.Name -Split " - " if ($SplitName.Length -eq 1) { Continue } $NewFileName = "" for($counter = 0; $counter -le ($SplitName.Length - 1); $counter++) { if ($counter -eq "0" ) { Continue } if ($counter -eq "1" ) { $NewFileName += $SplitName[$counter] } else { $NewFileName = $NewFileName + " - " + $SplitName[$counter] } } if ($NewFileName -eq "") { Write-Host "The value of NewFileName is empty [$NewFileName]" Continue } if (Test-Path -path "$folder\$NewFileName") { Write-Host "The destination path [$folder\$NewFileName] already exists!, skipping renaming!!" Continue } Rename-Item -Path "$folder\$file" -NewName $NewFileName Write-Host "INFO: Successfully renamed file [$folder\$file] to [$NewFileName]" } } $ParentFolder = "G:\1" $subfolders = dir $ParentFolder -Recurse | where {$_.PsIsContainer} foreach ($subfolder in $subfolders) { $FolderPath = $subfolder.FullName Write-Host "Processing Folder [$FolderPath]" Rename-Files $FolderPath }