I need to remove the first character (which is always "_") from all filenames in a folder.

I'm currently using this command: ren _*.txt *.txt But it doesn't work.

However, if I run ren _*.txt A*.txt it perfectly works, but it is not what I want.

5 Answers 5


again, try powershell ;)

Run this in your desired directory:

get-childitem *.txt | rename-item -newname { [string]($_.name).substring(1) }

- get-childitem *.txt collects all *.txt-files in the actual directory.
- rename-item -newname renames the piped results from the get-childitem command with the string that is generated in {}
- [string]($_.name).substring(1) takes the filename starting after the first character

  • hey, it says gci is not recognized as an internal or external command
    – aneuryzm
    Apr 20, 2011 at 12:30
  • 2
    hm... this should work...however. gci is per default an alias for Get-Childitem - take that instead. Did you run powershell? It doesn't work if you tried that in cmd.exe (but you can start powershell.exe from within cmd)
    – wullxz
    Apr 20, 2011 at 12:32
  • all right, now it works. I still have a small issue, the first character is actually a ".", so I have 2 initial characters to remove "._filename.jpg" and not "_filename.jpg". Do you how to deal with the dots ?
    – aneuryzm
    Apr 20, 2011 at 12:40
  • 1
    if you want to remove the first 2 characters, just replace the (1) after 'substring' with (2). In powershell, the whole filename is treated as a string(-object), points included.
    – wullxz
    Apr 20, 2011 at 12:43
  • If you want to replace any part in the middle of the name (which is the same in every name), you can use replace instead of substring like so: get-childitem *.txt | rename-item -newname { [string]($_.name).replace("old string","new string") }
    – SimonH
    Mar 23, 2017 at 12:33

Forget about complicated scripts for this.

rename is a very old and never properly completed command.  If you do not use it properly, the result might surprise you.

For example to remove a prefix abcd from abcd1.txt, abcd2.txt, abcd3.txt etc. in order to get 1.txt, 2.txt, 3.txt simply use

rename "abcd*.txt" "////*.txt"

You need the same number of / as the number of initial characters you would like to remove.  So, for your specific situation, you would use

ren "_*.txt" "/*.txt"

Do use double quotes for both arguments.


If you want to avoid having to write anything, try the Bulk Rename Utility. The interface can be quite scary at first but just have a play around with it and you'll see it's not actually hard to use at all.


Just if anyone needs in future: I use 1-4 rename. It is fast, does not have to be installed. When you run it hit F2 for advanced mode and you can tell it to kill the first 4 characters. Below is the link to the program.

Download Link: http://www.1-4a.com/rename/


in 2020 I had the same bulk rename problem: Remove fixed string of random characters for a lot of names.

Used this code in the Command Promt:

Rename "?????*.*" "*/////*.*"

(Remove any 5 characters) (You have tu use ")

Work perfet, thanks guys from de past.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .