Search code examples
windowsbatch-filecmd

Renaming files sequentially trough subfolders - .bat


I'm trying to do some renaming but recursively, below is where I am and I am a bit stuck. I added a remark where I think I'm wrong.

@echo off

setlocal enableextensions enabledelayedexpansion

set "psCommand="(new-object -COM 'Shell.Application')^
.BrowseForFolder(0,'Please choose a folder.',0,0).self.path""
for /f "usebackq delims=" %%i in (`powershell %psCommand%`) do set "rootfolder=%%i"

@echo on

cd %rootfolder%

for /r "%rootfolder%\" %%a in (*) do (
    set "folder=%%~dpa"
    cd %%~dpa
    for %%i in ("!folder!") do (
            set parent=%%~ni
        )

:: for %%i in ("!folder!") do (set parent=%%~ni) 
:: that part returns me parent= 
:: i would like it to be for example if folder is d:\test\test1 
:: parent = test1

    set /a count=10000
    for /F "eol=| delims=" %%f in ('dir /B /A:-D-H-S /O:N "*.tif"') do (
        set /a count+=1
        set fileName=!parent!_!count:~-4!%%~xf
        rename "%%f" "!fileName!"
    )
)
exit /b

Solution


  • Hello,


    posting an answer to my question, i managed to find a solution, you can see it below but i'm sure that right now the people like you who knows what they're doing have bleeding eyes.

    so if you want to help me making that script look nicer, you're very welcome.

    @echo off
    
    setlocal enableextensions enabledelayedexpansion
    
    set "psCommand="(new-object -COM 'Shell.Application')^
    .BrowseForFolder(0,'Please choose a folder.',0,0).self.path""
    for /f "usebackq delims=" %%i in (`powershell %psCommand%`) do set "rootfolder=%%i"
    
    cd %rootfolder%
    
    for /r "%rootfolder%" %%a in (*) do ( 
            set Fdir=%%~dpa 
            call :001 "%%~a"
    )
        
    :001
        cd %Fdir%
        set Fder=%cd%
        for %%i in (%Fder%) do (
            call :002 "%Fder%"
        )
        
    :002
    @echo on
    set var1=%cd%
    set var2=%var1%
    set i=0
    
    :003
    for /F "tokens=1* delims=:+\+" %%A in ( "%var1%" ) do (
        set /A i+=1
        set var1=%%B
        goto 003
    )
    for /F "tokens=%i% delims=:+\+" %%G in ( "%var2%" ) do set last=%%G
    goto 004
    
    :004
        set parent=!last!
        set /a count=10000
        for /F "eol=| delims=" %%f in ('dir /B /A:-D-H-S /O:N "*.tif"') do (
            set /a count+=1
            set fileName=!parent!_!count:~-4!%%~xf
            rename "%%f" "!fileName!"
        )
    exit /b