batch file - Remove suffix from a directory's name -
a short foreword: working awkward setup; company have been contracted requires perform operations in batch, because of potential dangers of downloaded software , bureaucracy. have work purely in batch problem - no addins, downloads, or powershell suggestions please (:p).
question:
imagine directory containing directories, e.g.,
- parent folder 
- subfolder
 - subfolder(1)
 - subfolder(2)
 
 
they've been uniquely reference such:
- parent folder 
- ref231_subfolder
 - ref527_subfolder(1)
 - ref8837_subfolder(2)
 
 
now want remove suffixes added prevent duplicate names! so, batch's rather challenging syntax string replacement, has proved quite issue. let me walk through code have, doesn't work, may of use:
@echo off  setlocal enabledelayedexpansion  :: returns directories (/a:d), pipes findstr command, :: identifies prefix @ end of directory name. /f "eol=: delims=" %%f in ('dir /b /a:d ^| findstr ^.*^(*^)$') (    set f=%%f     set suffix=^(!f:*^(=!    echo !suffix!    set newname=!f:!suffix!=!    echo !newname! )  pause   problem:
i expect set newname=!f:!suffix!=! replace value of !suffix! within string f, directory name, , set variable !newname!. why instead !newname! equal same !suffix!? 
also, please note i've tried using %suffix%, , myriad of other variable syntaxes, no avail.
thanks help!
!var1:!var2!=! (that delayed expansion inside delayed expansion) not allowed (can not correctly parsed). , in case !var1:%var2%=! var2 value changing inside for block not work (there no delayed expansion var2). 
to make code work need like
for /f "delims=" %%f in ('dir /b /a:d ^| findstr /r /c:"^.*\(.*\)$"') (     echo %%f     set "f=%%f"     set "suffix=(!f:*(=!"     echo !suffix!     /f "delims=" %%a in ("!suffix!") set "newname=!f:%%~a=!"     echo !newname! )       that is, can not write delayed expansion inside delayed expansion, replace inner variable for replaceable parameter. 
anyway, case can simplified.
for /d %%a in ( "*(*)"  ) /f "delims=(" %%b in ("%%~na" ) echo ren "%%~fa" "%%~b"   for each folder parenthesis, take name, , split @ parenthesis. first token hold new name without suffix. ren command rename folder (full path it) new name. 
ren commands echoed console. if output correct, remove echo rename folders.
Comments
Post a Comment