command prompt rename files in sequential serie

Hello I want to order a serie of files I have  in c:\data


   and so on any number of files.
   This files could be hundred and there are names that doesn't exist in sequence like file003.pdf, file005.pdf, etc. Now in command prompt what script could be to order in sequence all that files and the numbers of the fies doesn't exist will be taken for next files in sequence for example file003.pdf doesn't exist then file004.pdf will take the name of file003.pdf in our example file007.pdf will take the name of file004.pdf, file009.pdf will take the name of file005.pdf and so on until the end of files .pdf only. The final result pf all process will be in other words:

file001.pdf - not touched because is ok in order
file002.pdf - not touched because is ok in order
file004.pdf - renamed to file003.pdf
file007.pdf - renamed to file004.pdf
file009.pdf - renamed to file005.pdf
file010.pdf - renamed to file006.pdf

 The final files ordered in resume:


   If anyone could help with a command .bat script.
Thank you
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Try it with this; it's in test mode and will only display the "ren" commands it would normally run, so that you can test it. Remove the uppercase ECHO in line 24 to run it for real.
@echo off
setlocal enabledelayedexpansion
REM *** Folder in which the files are:
set SourceFolder=D:\Temp\FileRename
REM *** File prefix until the numeric index:
set FilePrefix=file
REM *** File extension to search:
set Extension=pdf
REM *** Length of the numeric index:
set IndexLength=3

set ZeroString=0000000000
call :GetStringLength PrefixLength "%FilePrefix%"
set /a CurrentIndex = 1
for /f "delims=" %%a in ('dir /b /a:-d /o:n "%SourceFolder%\%FilePrefix%*.%Extension%"') do (
	set FileName=%%~na
	set FileIndex=!FileName:~%PrefixLength%,%IndexLength%!
	call :GetFormattedIndex FormattedIndex !CurrentIndex! %IndexLength%
	echo Processing %%a; file index is '!FileIndex!', sequential index is '!FormattedIndex!' ...
	if "!FileIndex!"=="!FormattedIndex!" (
		echo ... indices match, no change.
	) else (
		echo ... file index not in sequential order, will rename.
		ECHO ren "%SourceFolder%\%%a" "%FilePrefix%!FormattedIndex!.%Extension%"
	set /a CurrentIndex += 1
goto :eof

:GetFormattedIndex <ReturnVariable> <Index> <Length>
set __string=%ZeroString%%~2
set %1=!__string:~-%3!
goto :eof

:GetStringLength <ReturnVariable> <String>
set /a i = 0
set __string=%~2
if "!__string:~%i%,1!"=="" (
	set %1=%i%
	goto :eof
) else (
	set /a i += 1
	goto :StringLengthLoop
goto :eof

Open in new window


Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
coerraceAuthor Commented:
Works perfect including if you put  IndexLength longer than 3
Amazing code!!!
Hi coerrace

You may have been left wondering why you received an email notification of a comment submitted before the one by oBdA.  I started writing a batch file yesterday and had posted a "working on this" comment, but something came up and I had to leave what I was doing, so I deleted the comment and wasn't able to finish what I had started.  oBdA's batch file is along the same lines as I was heading, but is much better.

coerraceAuthor Commented:
Oh I see honestly the first thing at the morning was see the oBdA I tested but never saw a working on this, but is ok.
Thank you for all
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Windows Batch

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.