Search code examples
powershellrenaming

replace names of all directiories and files in PS


I want to replace all space characters into "_" in names of all subfolders and files. Unfortunately when I type:

Get-ChildItem -recurse -name | ForEach-Object { Rename-Item $_ $_.replace(" ","_") }

Error message:

Rename-Item : Source and destination path must be different. At line:1 char:60 + Get-ChildItem -recurse -name | ForEach-Object { Rename-Item <<<< $_ $.replace(" ","") } + CategoryInfo : WriteError: (PATH_HERE) [Rename-Item], IOException + FullyQualifiedErrorId : RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand

How I should improve this short code?


Solution

  • Don't use the Name switch, it outputs only the names of the objects, not their full path. Try this:

    Get-ChildItem -Recurse | `
       Where-Object {$_.Name -match ' '} | `
         Rename-Item -NewName { $_.Name -replace ' ','_' }