How can I rename files by replacing underscores with hyphens?

January 11, 2026 4 answers
Asked by CuriousCoder42
I'm looking to rename a bunch of files across multiple folders and subfolders. Specifically, I want to change the 12th character of the filenames from an underscore to a hyphen. For example, a filename like "ABC-7178231_dinotrucks_dog" has the underscore right after 7 digits. I've tried working out a solution using PowerShell, but I'm not quite getting it right. Any help would be appreciated!

Answers

TechWhiz88
It looks like your regex pattern is slightly off. Your file name has the underscore right after the seven digits, so you need to adjust your code. Try modifying your regex to look for the underscore after those 7 digits. You might want to test it with something like this: `'^(.{4}d{7})_'` for your matching pattern. That should do the trick!
Reply to this answer
RenamerGuru
If you're open to alternatives, consider using Bulk Rename Utility. It's a user-friendly GUI for renaming files in bulk, or you could try its command line version. Theyโ€™re both free and pretty effective for managing file names!
Reply to this answer
PowerShellPro
Hereโ€™s a full script that will rename the files for you. It recursively goes through all directories and renames files by replacing the underscore after the 7 digits with a hyphen: ```powershell Get-ChildItem -Path "C:YourFolderPath" -Recurse -File | ForEach-Object { $oldName = $_.Name if ($oldName -match '^(.{4}d{7})_(.+)$') { $newName = $oldName -replace '^(.{4}d{7})_', '$1-' Rename-Item -Path $_.FullName -NewName $newName -WhatIf Write-Host "Would rename: $oldName -> $newName" } } ``` Just replace `"C:YourFolderPath"` with your actual directory path. This script even has a safety feature with `-WhatIf` so you can preview changes before actually renaming.
Reply to this answer
ScriptSavant23
Here's a modified version of your regex that should work: `{ $_.Name -replace '^(.{11})_', '$1-' }`. This should effectively replace the underscore while keeping the rest of your script in check. Also, don't forget to add the `-WhatIf` parameter at the end of your command to preview changes before applying them!
Reply to this answer

Add your answer

Answers are reviewed before publication.

Related Discussions