Forum Discussion
Powershell Clean up Folder Names - Rename Folders and Subfolders Recursively
- Aug 23, 2022
Dan_CS It's the special characters, if you replace @ with at for example, it does work for me
$Source_Folder = 'd:\temp\Test' $folders = Get-ChildItem -LiteralPath $Source_Folder -Directory Foreach ($folder in $folders) { $new_folder_name = $folder.Name # Remove Characters $new_folder_name = $new_folder_name -replace '#', ' ' # Remove Hyphen with _ $new_folder_name = $new_folder_name -replace '-', '_' # Remove @ with at $new_folder_name = $new_folder_name -replace '@', 'at' # and some more replacements...... Write-Host "Renaming:" $folder.FullName "to" $new_folder_name Rename-Item "$($folder.FullName)" "$($new_folder_name)" -Verbose }
===================================================
PS C:\Users\Dan\Desktop> C:\Users\Dan\Desktop\FORUM Folder.ps1
Renaming: C:\Users\Dan\Desktop\1\1 - #Test to 1 _ Test
Renaming: C:\Users\Dan\Desktop\1\2 - Content to 2 _ Content
Renaming: C:\Users\Dan\Desktop\1\3 - Test to 3 _ Test
Renaming: C:\Users\Dan\Desktop\1\2 - Content\2.1 - # Test to 2.1 _ Test
Rename-Item : Cannot rename because item at 'C:\Users\Dan\Desktop\1\2 - Content\2.1 - # Test' does not exist.
At C:\Users\Dan\Desktop\FORUM Folder.ps1:41 char:5
+ Rename-Item "$($folder.FullName)" "$($new_folder_name)"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand
Renaming: C:\Users\Dan\Desktop\1\2 - Content\2.1 - # Test\2.2 @ # Test to 2.2 Test
Rename-Item : Cannot rename because item at 'C:\Users\Dan\Desktop\1\2 - Content\2.1 - # Test\2.2 @ # Test' does not exist.
At C:\Users\Dan\Desktop\FORUM Folder.ps1:41 char:5
+ Rename-Item "$($folder.FullName)" "$($new_folder_name)"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand
Renaming: C:\Users\Dan\Desktop\1\3 - Test\3.1 - @ to 3.1 _
Rename-Item : Cannot rename because item at 'C:\Users\Dan\Desktop\1\3 - Test\3.1 - @' does not exist.
At C:\Users\Dan\Desktop\FORUM Folder.ps1:41 char:5
+ Rename-Item "$($folder.FullName)" "$($new_folder_name)"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand
Renaming: C:\Users\Dan\Desktop\1\3 - Test\3.2 - # @ to 3.2 _
Rename-Item : Cannot rename because item at 'C:\Users\Dan\Desktop\1\3 - Test\3.2 - # @' does not exist.
At C:\Users\Dan\Desktop\FORUM Folder.ps1:41 char:5
+ Rename-Item "$($folder.FullName)" "$($new_folder_name)"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand
Renaming: C:\Users\Dan\Desktop\1\3 - Test\3.1 - @\2.2 @ # Test to 2.2 Test
Rename-Item : Cannot rename because item at 'C:\Users\Dan\Desktop\1\3 - Test\3.1 - @\2.2 @ # Test' does not exist.
At C:\Users\Dan\Desktop\FORUM Folder.ps1:41 char:5
+ Rename-Item "$($folder.FullName)" "$($new_folder_name)"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand
========================================
sorry for the ugly error messages but this is what it says
- Dan_CSAug 23, 2022Copper Contributor
My folder structure.
I wanted to clean up the folder names
- Aug 23, 2022
Dan_CS It's the special characters, if you replace @ with at for example, it does work for me
$Source_Folder = 'd:\temp\Test' $folders = Get-ChildItem -LiteralPath $Source_Folder -Directory Foreach ($folder in $folders) { $new_folder_name = $folder.Name # Remove Characters $new_folder_name = $new_folder_name -replace '#', ' ' # Remove Hyphen with _ $new_folder_name = $new_folder_name -replace '-', '_' # Remove @ with at $new_folder_name = $new_folder_name -replace '@', 'at' # and some more replacements...... Write-Host "Renaming:" $folder.FullName "to" $new_folder_name Rename-Item "$($folder.FullName)" "$($new_folder_name)" -Verbose }- Dan_CSAug 23, 2022Copper Contributor
This powershell is very exhausting - I try to avoid using it for this exact reason, its not for simple folks.
But I had 5000 files and bulk rename utility takes so long to use so I thought powershell.
What I learned from this
1. Open powershell as Administrator > to avoid Access denied on some folders
2. It doesn’t like special characters like @, #I will try to figure out how to replace whitespace, it doesnt like replacing whitepsace like this ? " " , ""
Again thank you for your help and you are a STAR!
Have a great day 🙂
Dan