Use PowerShell to do anything smarter for a DOS prompt. Here, I’ve shown how to batch rename all the files and directories in the current directory that contain spaces by replacing them with _ underscores.
Dir |
Rename-Item -NewName { $_.Name -replace " ","_" }
EDIT :
Optionally, the Where-Object command can be used to filter out ineligible objects for the successive cmdlet (command-let). The following are some examples to illustrate the flexibility it can afford you:
-
To skip any document files
Dir | Where-Object { $_.Name -notmatch "\.(doc|xls|ppt)x?$" } | Rename-Item -NewName { $_.Name -replace " ","_" } -
To process only directories (pre-3.0 version)
Dir | Where-Object { $_.Mode -match "^d" } | Rename-Item -NewName { $_.Name -replace " ","_" }PowerShell v3.0 introduced new
Dirflags. You can also useDir -Directorythere. -
To skip any files already containing an underscore (or some other character)
Dir | Where-Object { -not $_.Name.Contains("_") } | Rename-Item -NewName { $_.Name -replace " ","_" }