What Sequential Numbering Actually Means
Sequential numbering means renaming a batch of files so they share one base name followed by a counter that increments by one: report_1, report_2, report_3, or with zero-padding, report_001, report_002, report_003. The order the numbers follow is decided by how your files are sorted at the moment you rename them, which is usually alphabetical by current name, but can be by date taken or a custom selection order depending on the tool.
Because this is a pattern task rather than a content task, the mechanics differ by platform far more than most people expect. What Windows does automatically in File Explorer, macOS exposes as a named mode in Finder, and Linux leaves to a one-line shell loop. The rest of this page walks each one, then covers padding, start number, and date order so you are not left stitching answers together from three different threads.
Windows: File Explorer, PowerToys, and PowerShell
The fastest method needs no extra software. In File Explorer, select every file you want to number, press F2 to rename the first one, type a base name such as vacation, and press Enter. Windows applies that base name to the whole selection and appends an incrementing counter in parentheses, giving you vacation (1), vacation (2), vacation (3), and so on. The catch is that File Explorer gives you no control over the format: you cannot set zero-padding, you cannot choose a start number, and the parentheses are baked in. For a quick pass on a handful of files it is perfect. For anything precise, you need one of the next two options.
PowerToys is the middle ground. Its PowerRename module adds an Enumerate Items option: enable it, and any ${padding} placeholder in your replacement text becomes an incrementing counter. You set the start value and the increment in the enumerate settings, so a replacement of vacation_${padding} can produce vacation_1, vacation_2, vacation_3, or begin at whatever number you specify. PowerRename also previews every rename before you commit, which is worth a lot when you are numbering hundreds of files at once.
For full control, PowerShell handles it with a short counter loop. You initialize a counter, walk the files, and format the number with zero-padding as you rename. A pattern like $i = 1; Get-ChildItem *.jpg | ForEach-Object { Rename-Item $_ ("photo_{0:D3}.jpg" -f $i); $i++ } renames every JPG to photo_001.jpg, photo_002.jpg, photo_003.jpg. The {0:D3} format specifier is what pads each number to three digits, and changing the starting value of $i changes where the count begins. This is the most flexible route on Windows and the one to reach for when padding and start number both matter.
macOS: Finder's Built-In Rename
macOS builds sequential numbering right into Finder, so you rarely need the Terminal for it. Select the files, right-click, and choose Rename. In the dialog, switch the mode from Replace Text to Format. Set Name Format to Name and Counter, type your base name in the Custom Format field, and enter a value in the Start numbers at box.
The zero-padding trick on macOS is subtle: Finder pads to the width of the starting number. If you start at 1, you get 1, 2, 3, up to 10 with no padding, which breaks alphabetical sorting. If you start at 01, Finder pads every number to two digits, giving you 01, 02, 03 through 10, which sorts correctly. Start at 001 for three-digit padding. So the starting number does double duty on macOS: it sets both where the count begins and how wide the padding is. Finder previews the full new name at the bottom of the dialog before you apply, so you can confirm the format looks right first.
Linux and bash: A printf Loop
On Linux, or in any bash shell including macOS Terminal, a small loop does the whole job and gives you total control over padding and start number. The core pattern is: i=1; for f in *; do mv "$f" "$(printf 'photo_%04d.jpg' $i)"; i=$((i+1)); done. This walks every file in the folder, renames it to photo_0001.jpg, photo_0002.jpg, photo_0003.jpg, and increments the counter each time. The %04d in the printf format is what forces four-digit zero-padding; change it to %03d for three digits, or %02d for two. To start at a different number, set i to that value at the top, for example i=100 to begin at photo_0100.jpg.
One important detail on Linux is sort order. The shell expands * in plain alphabetical order, which sorts file10 before file2. If your source files already carry numbers and you want them processed in true numeric order, run the loop over ls -v output instead, since ls -v sorts numbers naturally (file2 before file10). A safe form is: i=1; for f in $(ls -v); do mv "$f" "$(printf 'photo_%04d.jpg' $i)"; i=$((i+1)); done. Always test on a copy of the folder first, because mv overwrites without warning if two names collide.
Windows vs macOS vs Linux at a Glance
The three platforms expose the same three controls, base name, padding, and start number, in very different places. This table maps each control to where you set it, so you can jump straight to the method that fits the machine in front of you.
Setting base name, padding, and start number by platform
| Control | Windows | macOS | Linux / bash |
|---|
| Set the base name | Type it in the F2 rename box, or as the replacement text in PowerRename | Enter it in Finder's Custom Format field (Format mode) | Set it as the literal text in the printf format string |
| Zero-padding | Not in Explorer; use PowerShell {0:D3} or a PowerRename pattern | Set by the width of the start number (01 gives two digits) | Set by the printf specifier (%04d gives four digits) |
| Custom start number | Not in Explorer; set the enumerate start in PowerRename or $i in PowerShell | Enter it in the Start numbers at box | Set the counter, e.g. i=100, before the loop |
| Order used | Selection order in Explorer; list order in PowerRename | Finder's current sort order | Shell glob order, or ls -v for natural numeric order |
The pattern across the table is consistent: the more control you want over padding and start number, the closer you move to a scripted method (PowerShell on Windows, a bash loop on Linux), while Finder on macOS packs the most control into a graphical tool. Pick the row that matches your machine, and the three sub-questions below fill in the details.
Zero-Padding: Why 01 and Not 1
Zero-padding is the single most common thing people get wrong. Computers sort file names as text, character by character, not as numbers. So without padding, a folder of photo_1 through photo_12 sorts as photo_1, photo_10, photo_11, photo_12, photo_2, photo_3, because the character 1 comes before the character 2 regardless of the digits that follow. That is almost never the order you want.
Padding fixes it by giving every number the same width. photo_01 through photo_12 sorts correctly as 01, 02, 03, right through 12, because every entry is two characters wide and lines up. The rule of thumb: pad to the number of digits in your largest count. Up to 99 files, use two digits (01). Up to 999, use three (001). On macOS you get this by starting the count at 01 or 001; in PowerShell you get it with {0:D2} or {0:D3}; in bash you get it with %02d or %03d.
Starting at a Custom Number
Sometimes you do not want to start at 1. Maybe you are adding a second batch of photos to an existing set that already runs to 099, so the new files need to begin at 100. Every method except plain File Explorer supports this. In PowerRename, set the enumerate start value. In PowerShell, initialize your counter with the number you want, for example $i = 100. In Finder, type 100 into the Start numbers at box. In bash, set i=100 before the loop. The one thing to watch when you combine a custom start with padding: make sure the padding width covers your highest final number, or the count will jump width partway through and break sorting again.
Numbering in Date-Taken Order
For photos, alphabetical order is rarely what you want; you want the numbers to follow the order the shots were taken. On macOS, sort the Finder window by Date Created or Date Added before you open the Rename dialog, and Finder numbers the files in that visible order. On Windows, PowerRename respects the sort order of the file list, so sort by date first, then apply the enumerate pattern. In bash, replace the plain glob with a date-sorted listing: ls -tr lists files oldest first, so a loop over $(ls -tr) numbers them in capture order (assuming the file modification time reflects when they were taken). For camera files where the embedded EXIF capture time is the real source of truth, a dedicated photo tool that reads EXIF is more reliable than file timestamps, which can shift when files are copied.
A Different Problem: Naming by Content
One honest note before you go. Everything above solves a pattern problem: you already know the order you want, and you just need a counter applied cleanly. That is exactly what sequential numbering is for, and it is the right tool when the sequence itself carries the meaning, like frames of a video or pages of a scan.
It is worth being clear that this is a different problem from naming files by what is inside them. Renamer.ai reads the actual content of each file, an invoice number, a contact name, a document date, and names the file from that, which is the opposite of assigning an arbitrary counter. If your real goal is a sequence, use the platform methods on this page; a general purpose renamer built around content will not add much. If your goal is meaningful names rather than a count, that is a different tool for a different job. For the broader set of batch renaming approaches, the bulk rename software hub covers the full range.