Rename all files in a directory with a Windows batch script Rename all files in a directory with a Windows batch script windows windows

Rename all files in a directory with a Windows batch script


A FOR statement to loop through the names (type FOR /? for help), and string search and replace (type SET /? for help).

@echo offsetlocal enableDelayedExpansionfor %%F in (*120x90.jpg) do (  set "name=%%F"  ren "!name!" "!name:120x90=67x100!")


UPDATE - 2012-11-07

I've investigated how the RENAME command deals with wildcards: How does the Windows RENAME command interpret wildcards?

It turns out that this particular problem can be very easily solved using the RENAME command without any need for a batch script.

ren *_120x90.jpg *_67x100.*

The number of characters after the _ does not matter. The rename would still work properly if 120x90 became x or xxxxxxxxxx. The important aspect of this problem is that the entire text between the last _ and the . is replaced.


As of Windows 7 you can do this in one line of PowerShell.

powershell -C "gci | % {rni $_.Name ($_.Name -replace '120x90', '67x100')}"

Explanation

powershell -C "..." launches a PowerShell session to run the quoted command. It returns to the outer shell when the command completes. -C is short for -Command.

gci returns all the files in the current directory. It is an alias for Get-ChildItem.

| % {...} makes a pipeline to process each file. % is an alias for Foreach-Object.

$_.Name is the name of the current file in the pipeline.

($_.Name -replace '120x90', '67x100') uses the -replace operator to create the new file name. Each occurrence of the first substring is replaced with the second substring.

rni changes the name of each file. The first parameter (called -Path) identifies the file. The second parameter (called -NewName) specifies the new name. rni is an alias for Rename-Item.

Example

$ dir Volume in drive C has no label. Volume Serial Number is A817-E7CA Directory of C:\fakedir\test11/09/2013  16:57    <DIR>          .11/09/2013  16:57    <DIR>          ..11/09/2013  16:56                 0 750_MOT_Forgiving_120x90.jpg11/09/2013  16:57                 0 751_MOT_Persecution_1_120x90.jpg11/09/2013  16:57                 0 752_MOT_Persecution_2_120x90.jpg               3 File(s)              0 bytes               2 Dir(s)  243,816,271,872 bytes free$ powershell -C "gci | % {rni $_.Name ($_.Name -replace '120x90', '67x100')}"$ dir Volume in drive C has no label. Volume Serial Number is A817-E7CA Directory of C:\fakedir\test11/09/2013  16:57    <DIR>          .11/09/2013  16:57    <DIR>          ..11/09/2013  16:56                 0 750_MOT_Forgiving_67x100.jpg11/09/2013  16:57                 0 751_MOT_Persecution_1_67x100.jpg11/09/2013  16:57                 0 752_MOT_Persecution_2_67x100.jpg               3 File(s)              0 bytes               2 Dir(s)  243,816,271,872 bytes free