Home / Guides
How to rename files from an Excel list
Last updated . Takes about 3 minutes for a batch of 200 files.
If you already have a spreadsheet with the current filenames in one column and the names you want in another — a photo shoot's shot list, a product catalogue, scanned invoices, exported audio stems — you do not need a macro. You need to get that spreadsheet and those files into the same place and let something match them up. That is what the tool on the home page does, entirely in your browser.
1. Put the two columns in your sheet
Any of these header pairs are recognised automatically:
| Current filename | New filename |
|---|---|
old, current, from, source, filename, original, existing name | new, target, to, rename to, desired, new name |
The first column is the name as it is on disk right now, the second is the name you want. Everything after row 1 is treated as data. Blank rows are skipped. If your sheet has no headers at all, the tool falls back to using the first two columns and says so.
A real example. Row 2 could read DSC_0412.JPG → whitby-abbey-sunrise-01.jpg.
The match is made on the name without its extension and is case-insensitive, so dsc_0412 also
matches DSC_0412.JPG.
2. Decide what happens to extensions
The extension on disk wins. If your sheet says invoice-2024-001 and the file is
scan_0031.pdf, the result is invoice-2024-001.pdf. You do not have to type
extensions, and if you do type one that differs from the file, the file's own extension is kept. This is
deliberate: a spreadsheet should not be able to turn a PDF into a JPEG by typo.
3. Get the files and the sheet into the tool
- Open the renamer.
- Drop your
.xlsxor.csvon the first box. Every sheet in the workbook is listed; pick one. - Drop the files on the second box — select them in Explorer/Finder, or drop a ZIP of them. A ZIP is unpacked in memory.
- Check the preview.
Nothing is uploaded at any point. The spreadsheet is parsed by a JavaScript library inside the tab, the matching happens in memory, and the output ZIP is assembled the same way. You can confirm this yourself by opening your browser's Network panel while you use it.
4. Read the preview before you commit
The preview lists every file with one of five statuses:
| Status | Meaning |
|---|---|
| Will rename | Matched, new name is legal and unique. |
| Unchanged | Matched, but the new name is identical to the old one. |
| No row in sheet | The file exists on disk but no row mentions it. It is left untouched. |
| Conflict | Two files would end up with the same name. Both are skipped rather than one silently winning. |
| Illegal name | Contains < > : " / \ | ? *, ends in a dot or space, or is a reserved Windows name such as CON or LPT1. |
Rows in the sheet that match no file are listed separately, so a typo in the old-name column shows up as "unmatched row" instead of quietly doing nothing.
5. Download the renamed ZIP — or write to the folder
Download a ZIP works everywhere and is the safe default: the original files are untouched, you unzip the result next to them and delete the originals yourself when you are happy.
Rename in place is offered in Chromium-based browsers (Chrome, Edge, Brave) through the File System Access API. You pick the folder, the tool copies each file to its new name and only then removes the old one, so an interrupted run leaves you with duplicates rather than holes.
Why not just write a VBA macro?
You can — Name oldPath As newPath in a loop is about six lines. The reasons people end up
looking for a tool instead are usually one of these:
- Mac Excel has no VBA-equivalent one-liner, and AppleScript is worse.
- Excel on the web cannot touch the filesystem at all.
- A macro fails silently halfway and you no longer know which files were done.
- Corporate machines block macros by default, which is a reasonable policy.
- You need to hand the job to someone who will not open the VBA editor.
Why not mv / Rename-Item in a shell?
Also fine if you are comfortable with it, and the tool will happily export a report CSV you could turn into a script. The trade-off is that a shell loop needs the mapping in a machine-readable form, needs correct quoting for names with spaces or apostrophes, and needs you to have a dry-run habit. If you have all three, use the shell. If you would rather see a preview table and click a button, use this.
What about 5,000 files?
The mapping engine is linear in the number of files and rows. Our own test suite builds a 5,000-file / 5,000-row plan and asserts it completes well under a second on a laptop; the browser-side ZIP then takes most of the wall time because it is compressing real bytes. Very large batches are limited by your tab's memory, not by the matching.