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