How can I mass rename files?
I've got a bunch of files named with a the pattern 99 - DescriptiveName.txt and I'd like to remove the number from the front so I just have DescriptiveName.txt.
How can I do this? Can I do it from the command line or is there a utility that can do this?
123 Answers
I know in your title you say "in dos" but I get the impression you are just looking for a way to do this and are wondering if that is the best way.
The absolute best tool I have found for this is Bulk Rename Utility.
It isn't a command line tool, but they do have a command line version if you really want to use it that way.
I've used the GUI version a lot, and it is very powerful, very fast and extremely easy to use.
Oh, and it is FREE for personal use.
3A small PowerShell script:
$args | Rename-Item -NewName { $_.Name.ToLower() -replace '\d+ - ' }Combined with more complex regular expressions, this might become something like:
ls | Rename-Item -NewName {$_ -replace '(\d+) - (.*)\.mp3$', '$2 - $1.mp3' }Which turns things like '01 - Beginning.mp3' into 'Beginning - 01.mp3'.
Use the -WhatIf parameter on Rename-Item to check renames before you issue them.
If you really want to use the windows command line (if you don't want to download something), you could do it like this:
dir /B > fileList.txt
for /f "tokens=1,2,3" %i in (fileList.txt) DO ren "%i %j %l" %lThe first line outputs the list of files into a file called fileList.txt. The second line separates each of the names in the list into 3 parts, the #, the "-" and the rest of the name. For each of those it does the rename command.
2AntRenamer makes it quite easy to define a pattern of renaming; there are plenty of ones already prepared (and it gives a preview of the actions):
Free for personal and commercial use.
0old school:
You can do a DIR and redirect the output to a file, as in DIR *.TXT >TEMP.BAT
Then use an editor to take out what you don't need and modify the parts you do need. Add an "@echo off" as the top line, save it and run it.
1Another option: Massive File Renamer
It allows to easily rename multiple files and file extensions. It's very fast and simple!
For advanced users and developers, it is possible to use regular expressions.
See it in action:
I use Total Commander's multi-rename tool (ctrl+M) for things like this. Their useful tool, one of too many to count, is easy to use, and can also employ regular expressions and templates if necessary. Oh, and it obviously gives you a preview before making any changes.
This is the third or fourth question I've answered recommending Total Commander... I should be getting a commission from them ;-)
The tool that I've been satisfied with is ReNamer. It supports also the saving of renaming rules, which has been useful to me, as I many times do the same renamings.
Below is an example of how to delete text before the first dash, but there are loads of other rules you can define.
For advanced users and developers, I would suggest RegexRenamer.
Pro's:
- Very simple UI;
- Regular expressions that the developers familiar with;
- GPLv2;
Con's:
- It's not a command line! :)
I've used Free Commander Portable (freeware) for this to good effect:
- Select or Navigate to the files or directories to rename
- Press [Ctrl-M] (or File > Multi-rename)
- fill out the fields as makes sense for your circumstance
- verify the preview shows what you expect
- Go!
The easiest way would be to use Rename Master.
Here's a command-line solution --- a Java program I wrote specifically to make it easy to work with "patterns" in filenames. It's free and open source, so feel free to modify it:
RenameWand
Some relevant usage examples:
Drop everything before the "-" in the filename:
java -jar RenameWand.jar "<a> - <b>" "<b>"Prepend a 3-digit number to the filename, sorting by last-modified time:
java -jar RenameWand.jar "<a>" "<3|#FT> <a>"Rearrange parts of the filename, and change case:
java -jar RenameWand.jar "<album> - <artist> - <song>.<ext>" "<artist.upper> <album.title> - <song>.<ext.lower>" I discovered RenPhoric about a month ago. Superb. And it's free.
No complicated interface and I was quickly able to rename exactly as I wanted. Regular Expression capable. Haven't used anything else since.
Like @zdan above, I did this by command line (using "cmd.exe" in Windows). It took some tinkering for my particular case, but a little research solved it.
Like zdan, I output the list to a TXT file, then used tokens and delims to rename the files accordingly. In my case, I started out with a list of files named like so:
name-01-02-2012.csvI wanted the file date portion to be in y/m/d order, with the "name" part at the end so it would read like this:
2012-01-02-name.csvTo do this en-masse, I used the following code. Note that when doing it this way, ALL parts of the filename are considered, including the extension of ".csv". That goofed me up the first time around.
dir /B > fileList.txt
for /f "tokens=1,2,3,4,5 delims=-." %i in (fileList.txt) DO ren "%i-%j-%k-%l.%m" %l-%j-%k-%i.%mThe tokens are the "parts" of the filename, the delims are the separators. Note that in my case, I had 2 delimiters (a dash and a dot).
I personally don't care for the "Bulk Rename" app. As others have mentioned, the GUI is atrocious and not very intuitive. With a little research and simple coding, these things can be done much mroe efficiently and quickly.
Funny name and command line tool very powerful, very fast and extremely easy to use. "Find And Replace Text" FART WORKS GREAT! can rename words in txt files too.
USAGE
Usage: FART [options] [--] <wildcard>[,...] [find_string] [replace_string]
Options: -h --help Show this help message (ignores other options) -q --quiet Suppress output to stdio / stderr -V --verbose Show more information -r --recursive Process sub-folders recursively -c --count Only show filenames, match counts and totals -i --ignore-case Case insensitive text comparison -v --invert Print lines NOT containing the find string -n --line-number Print line number before each line (1-based) -w --word Match whole word (uses C syntax, like grep) -f --filename Find (and replace) filename instead of contents -B --binary Also search (and replace) in binary files (CAUTION) -C --c-style Allow C-style extended characters (\xFF\0\t\n\r\\ etc.) --cvs Skip cvs dirs; execute "cvs edit" before changing files -a --adapt Adapt the case of replace_string to found string -b --backup Make a backup of each changed file -p --preview Do not change the files but print the changes 2 I like Cylog’s WildRename. It is powerful, yet easy to use, and has a lot of features:
- fast
- string manipulation
- counters
- wildcards
- regular expressions
- substitution
- case-conversion
- logging
- simulation (show the results without actually applying them)
Multi rename script is a open source alternative to Total Commanders Multi Rename tool which you could drive via script. It can use TC plugins for metadata information.
@echo off setlocal enabledelayedexpansion set X=5 set FOLDER_PATH=. pushd %FOLDER_PATH% for %%f in (*) do if %%f neq %~nx0 ( set "filename=%%~nf" set "filename=!filename:~%X%!" ren "%%f" "!filename!%%~xf" ) popd
save this in a batch file and run
2I use Blackboard to administer courses in a University. When I download an assignment in mass (in Blackboard, click top of grading column, then "assignment file download" Blackboard adds a bunch of extra stuff to the file name -often making the file name too long to be valid on Windows.
Here's what they look like:
Recitation20Assignment_studentname_attempt_2013-03-01-20-03-09_Exercise28129.docxAnd this is what I wanted
studentname.docxSo I used the approach that @zdan and @gtr1971 advised, by opening a command window on the folder with the files inside (CMD.EXE). Then run this command to put all file names in a document.
dir /b >filelist.txtEdit the document and remove folder names, etc.
Use this command to replace the Blackboard added filename stuff with just the username and file extension.
for /f "tokens=1,2,3,4,5,6 delims=_." %i in (filelist.txt) do ren "%i _%j_%k_%l_%m.%n" %j.%nHope this helps someone else as well.
Here's another simple program called File Attribute Changer that you can use to rename files. It's a portable program, so you can carry it on a USB drive.
I have developed a hybrid JScript/batch command line utility called JREN.BAT that can rename files or folders by performing a regular expression search and replace on the names. It is pure script that will run natively on any Windows machine from XP forward. Full documentation is embedded within the script.
Assuming JREN.BAT is in your current directory, or better yet, somewhere within your path, then your rename task becomes trivial.
jren "^\d+[ -]+(.+)\.txt$" "$1" /ior
jren "^\d+[ -]+(?=.+\.)" "" /fm "*.txt"There are many options, including the /S option that recursively performs the rename on sub-directories.
If you need serious power and are willing to shell out the money... PowerGrep is one of the most powerful and versatile tools on the market... you can rename almost anything with PowerGrep... even binary search and replace... it's created by RegEx Guru, Jan Goyvaerts.
New Answer [2022]
For developers, there is a very easy way to do bulk rename files.
Step-1
Install batch rename extension inside vscode
Step-2
Open the folder in which your files are
Step-3
Select files you wanna rename, select the first file then hold
Shift, and select last file all the files between will be selected or press Ctrl+Ain files tab.
Step-3
Under-the-Hood - This creates a temporary txt file of your file names which is self-destructing after you rename the files.
Upvote so that more and more people can get the solution.