Windows command-line regular expression renaming tool: RenameRegex

January 30th, 2012

Every once in a while, I need to rename a bunch of files.  Instead of hand-typing all of the new names, sometimes a nice regular expression would get the job done a lot faster.  While there are a couple Windows GUI regular expression file renamers, I enjoy doing as much as I can from the command-line.

Since .NET exposes an easy to use library for regular expressions, I created a small C# command-line app that can rename files via any regular expression.


RR.exe file-match search replace [/p]
  /p: pretend (show what will be renamed)

You can use .NET regular expressions for the search and replacement strings, including substitutions (for example, "$1" is the 1st capture group in the search term).


Simple rename without a regular expression:

RR.exe * .ext1 .ext2

Renaming with a replacement of all "-" characters to "_":

RR.exe * "-" "_"

Remove all numbers from the file names:

RR.exe * "[0-9]+" ""

Rename files in the pattern of "123_xyz.txt" to "xyz_123.txt":

RR.exe *.txt "([0-9]+)_([a-z]+)" "$2_$1"


You can download RenameRegex (RR.exe) from here.  The full source of RenameRegex is also available at GitHub if you want to fork or modify it. If you make changes, let me know!

Share this:

  1. Phil Quinn
    February 1st, 2012 at 04:44 | #1

    Hi — thanks for this. I noticed a small typo in this line: Rename files in the pattern of “124_xyz.txt” to “xyz_123.txt”:

  2. February 1st, 2012 at 09:16 | #2

    Thanks Phil, great catch! Fixed the post.

  3. Wesley
    February 1st, 2012 at 18:31 | #3

    Is there any chance to make it go into folders recursively? Thanks

  4. February 2nd, 2012 at 10:14 | #4

    It doesn’t currently, but that would be a fairly simple update to the code. Are you comfortable making changes? Feel free to contribute edits at, or even just open an issue there as a feature request.

  5. Giri
    June 12th, 2012 at 23:11 | #5

    For the fist case, windows rename command can do the job.
    See rename file extensions

    For all other cases, this tool would help.

  6. CZNeo
    October 8th, 2012 at 11:31 | #6


    I need to rename a couple of files that would contain only the lowercase english chars (ie. ŽČs.jpg -> zcs.jpg)

    Is that possible?



  7. October 8th, 2012 at 11:46 | #7


    The app currently ignores case in the RegEx, but you can change this line 56 in Program.cs:

    // rename via a regex
    string fileNameAfter = Regex.Replace(fileName, nameSearch, nameReplace, RegexOptions.IgnoreCase);

    To remove RegexOptions.IgnoreCase:

    // rename via a regex
    string fileNameAfter = Regex.Replace(fileName, nameSearch, nameReplace);

  8. WCWedin
    February 5th, 2013 at 14:02 | #8

    I’m commenting to say that this little program perfectly met my needs in a minor emergency and got me out of a tight spot! Thanks!

  9. Herm
    March 17th, 2015 at 15:40 | #9

    Thanks Much! Great simple batch rename utility, helps a lot as GUIs couldnt rename/replace extensions that needed to be truncated

  10. ozz
    June 7th, 2015 at 08:12 | #10

    nice tool. I like it.
    btw. the code seems to be updated, but the binary unfortunately not. *hint*

  11. Matteo
    August 11th, 2018 at 02:58 | #11

    Great tool.
    But is there a way to add a prefix or a suffix to a file names?

  12. August 22nd, 2018 at 06:15 | #12

    @Matteo: You could use a regex like:

    RR.exe * "(.*)" "prefix$1"
    RR.exe * "(.*)" "$1suffix"

  13. Matteo
    September 5th, 2018 at 23:28 | #13

    Thank you Nic. But when I use the prefix code I have the prefix added both at the beginning and at the end of the file name.
    FILENAME.ZIP –> prefixFILENAME.ZIPprefix

    The suffix code added the suffix two times
    FILENAME.ZIP –> FILENAME.ZIPsuffixsuffix

    I tried to edit the code, but it always added something at the end.

  14. September 13th, 2018 at 16:46 | #14

    Try this instead:

    RR.exe * "^(.*)$" "prefix$1"
    RR.exe * "^(.*)$" "$1suffix"

  15. Matteo
    September 13th, 2018 at 23:18 | #15

    It works perfectly! Great!

  16. computerprep
    April 18th, 2019 at 06:39 | #16

    This could fit my need perfectly!!! I’m just struggling to implement in my test folder before rolling out.

    I have a filename pattern like .*set.*[0-9]img.*[0-9].*
    To explain that in plain english (if my regex is off) the filenames start with any string of unknown characters (including periods, hyphens, commas, apostrophes, etc) followed by a specific pattern set#img# (where the number is between 1-4 digits long), followed by another string of unknown characters.

    I need to remove all characters after the set#img# pattern in the middle. Any advice?

    • April 30th, 2019 at 17:49 | #17

      You could use something like this maybe, with a replacement pattern?

      rr * “(.*set[0-9]+img[0-9]+).*” “$1” /p

      That would remove everything after set#img#

  17. September 26th, 2019 at 16:01 | #18

    I love this tool! Quick and easy, the only thing lacking for me is the ability to also rename *folders* – is that something that could be added?

  18. Peter
    January 7th, 2020 at 06:22 | #20

    As I read in comments that RR does not pay attention to Upper vs. Lower case.
    I need this option to replace e.g. ” rel. ” by ” Rel. ” in filenames.

    You have the recommendation to change this line 56 in Program.cs:

    Hmm, I am not a programmer. If it that easy: could you provide a changed RR version WITH upper/lowercase attention?

    Thank you

  19. Matteo
    January 30th, 2020 at 04:39 | #22

    Hi Nic, I need your help again if you can.
    I’d like to use your awesome tool in a net like “\\NAS\folder\” but windows command line doesn’t accept UNC directories. I tried to use Power shell but it doesn’t work properly.

    I need to rename file like in your example: “123_xyz.txt” to “xyz_123.txt”.

    .\RR.exe *.txt "([0-9]+)_([a-z]+)" "$2_$1" showed the help, so I modified in this:
    .\RR.exe *.txt "(?[0-9]+)_(?[a-z]+)" "${1}_${2}" but the result is the following:
    124_xyz.txt -> _.txt (pretend)

    Where am I wrong?
    Thank you very much

  20. February 14th, 2020 at 05:17 | #23

    Hi @Matteo!

    For UNC paths, can you “pushd” to them first so the folder is mapped as a local letter?

    I’ve just verified that this command should work:

    RR *.txt "([0-9]+)_([a-z]+)" "$2_$1" /p
    123_xyz.txt -> xyz_123.txt (pretend)

  21. Matteo
    February 17th, 2020 at 12:57 | #24

    Works! Thanks!

  22. Tom
    April 25th, 2020 at 09:20 | #25

    I _LOVE_ this tool and I use it all of the time. It saves me so much time and effort in file management.

    Thank you VERY much!

  23. huynh hieu
    May 11th, 2020 at 05:34 | #26

    Hi Nic!
    I need to change filenames, such as “”somethingtest01”, “somethingtest02”, …. to “somethingtest02”, “somethingtest03” (increment by 1 or an other number step)
    Could you help me

    • May 11th, 2020 at 06:57 | #27

      @huynh: I don’t think rename-regex is needed for that, but you should be able to do a loop in a batch file starting with the highest number, moving it forward by one, decrementing the number by one, moving that forward by one, etc.

  24. Carlos
    January 12th, 2021 at 08:59 | #28

    Nic, This tool is quite useful !!
    I’ve one question, the “file match” part is also RegEx based or is just standard wildcard processing from operating system?
    Kind regards

    • January 12th, 2021 at 10:19 | #29

      The file match is based on the regex, we’re not relying on the OS matching at all.

  1. No trackbacks yet.