I have a google drive folder that occasionally gets out of sync. Google (or someone) will append (1) to the directory/file names. Then it will remove the original directory and I'll have a bunch of folders and files named "xxx (1)".
I've been trying to write a powershell script that will crawl the directory tree and rename the folders/files by simply removing the " (1)" portion. I realize that this may result in some collisions, but I was hoping to get most of them replaced using a script. I'm not that concerned about the directory structure, I'll restore if needed, but it's just kind of a nuisance.
I've tried several powershell scripts, and the closest I've come so far is this...
This will return the correct NEW folder names
Get-ChildItem -Path "* (1)" -Recurse | select { $_.FullName.Replace(" (1)", "")}
So I tried this...
Get-ChildItem -Path "* (1)" -Recurse | Replace-Item -Path $_.FullName -Destination $_.FullName.Replace(" (1)", "") -WhatIf
I get the error "You cannot call a method on a null-valued expression."
You cannot call a method on a null-valued expression.
At line:1 char:1
+ Get-ChildItem -Path "* (1)" -Recurse | rename-item $_.FullName $_.Fu ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Try surrounding the last half in a foreach-object, using Rename-Item instead of Replace-Item, etc etc:
Get-ChildItem -Path "* (1)" -Recurse | ForEach-Object {Rename-Item -Path $_.Fullname -NewName $($_.Name.Replace(" (1)", "")) -WhatIf}