Search code examples
windowsbatch-filerenamedecrement

decrement of a number in filename with cmd on windows


I have a bunch of files:

CAR_003.dat
CAR_003.obj
CAR_004_prev0.png
CAR_004_prev1.png
CAR_004_tex0.tga

I need to rename them to:

CAR_002.dat
CAR_002.obj
CAR_003_prev0.png
CAR_003_prev1.png
CAR_003_tex0.tga

how I can do this with cmd on windows in a batch?


Solution

  • You need to execute the following batch in the directory you want.
    It will rename everything in the tree.

    @ECHO off
    SETLOCAL EnableDelayedExpansion
    
    FOR /R %%f in (CAR*) DO (
      FOR /F "usebackq tokens=1,2,* delims=_" %%m in ('%%~nxf') do (
        SET      filePath=%%~dpf
        SET    filePrefix=%%m_
        SET /a fileNumber=1%%~nn-1001
        SET    fileNumber=000!fileNumber!
        SET    fileNumber=!fileNumber:~-3!
        SET    filePosfix=%%~no
        SET       fileExt=%%~xf
        IF [!filePosfix!] EQU [] ( 
          SET    fileRest=%%~xf
        ) ELSE ( 
          SET    fileRest=_!filePosfix!!fileExt!
        )
        REM ECHO %%f
        REM ECHO !filePath!!filePrefix!!fileNumber!!fileRest!
        REM ECHO ~~~~~~~
        MOVE "%%f" "!filePath!!filePrefix!!fileNumber!!fileRest!"
      )
    )