1.

Solve : Help with renaming?

Answer»

Hi. I've RECENTLY experimented with multiple ways of renaming image files using the REN command, but I can't seem to get the result I want. For example, I have abc01.jpg abc02.jpg and abc03.jpg, and I want to erase all the "abc" from each image, leaving me with 01.jpg 02.jpg and 03.jpg. I tried using wildcards * but it only gives me 0bc01.jpg 0bc02.jpg and 0bc03.jpg. Can anyone help?I see "David Murphy" is viewing this.... watch out for trolls!

Use a free utility such as Bulk Rename Utility from http://www.bulkrenameutility.co.uk/Download.php It is available in 32 bit (BRC32.exe) and 64 bit (BRC64.exe) versions.

Then you would just type BRC64 /pattern:abc*.jpg /removefirstn:3 /EXECUTE

Honestly, it's not worth anybody bashing out a script just for a one-off task like that, it just leads to troll activity, that is if you aren't David Murphy yourself anyway.

What code do you have so far? Also, is the "abc" you are trying to remove all standard length? I.e. Are all the file names Pic01.jpg, Pic02.jpg etc., or are they different but with the numbers at the end (Picnic01.jpg, Water02.jpg etc.?) Lastly, do you want the renaming to be fully automated, or would you like to have a little more control over the process while it is happening? Quote from: Salmon Trout on October 16, 2011, 09:02:34 AM

Honestly, it's not worth anybody bashing out a script just for a one-off task like that, it just leads to troll activity, that is if you aren't David Murphy yourself anyway.

Darn, I already had. Well, not really for this particularly, but a renaming script that allows the user to bulk rename files either with sequential numbering scheme or with standard naming scheme and ability to edit the "non-standard" part of the name. But that's because I have way too much time on my hands and programming is a relaxing activity to me. (And I think I need to see somebody about that.) Quote from: Raven19528 on October 16, 2011, 02:05:02 PM
Darn, I already had. Well, not really for this particularly, but a renaming script that allows the user to bulk rename files either with sequential numbering scheme or with standard naming scheme and ability to edit the "non-standard" part of the name. But that's because I have way too much time on my hands and programming is a relaxing activity to me. (And I think I need to see somebody about that.)

Go on, post it, it would be interesting. I was going to myself but I saw at the top of the page a hint that that a certain banned troll had possibly signed up under a new name and was viewing the topic. He has a habit of creating multiple user accounts and using one to ask a question and another to "answer" it, often hilariously badly. So some real scripts would be very helpful.


I haven't gone back to this code to consolidate and streamline it at all, but it does allow for a lot of flexibility with the renaming scheme.

Code: [Select]echo off
setlocal enabledelayedexpansion
title Renamer v1.1
mode con: cols=61 lines=15
set origdir=%~dp0
set numnam=0

call :targets
cls
call :startstring
cls
call :endstring
cls

:renaming
for /f "delims=" %%F in ('dir /s /b %tarstr%') do (
  cls
  set OldFilePathAndName=%%~dpnxF
  set OldName=%%~nF
  set OldFilePath=%%~pF
  set Extension=%%~xF
  set FileDate=%%~tF
  call :SetOldFilePath
  cls
  echo !OldName!!Extension! in !OldFilePath! folder
  echo.
  set /p Continue=Edit this filename {y,n}
  if /i "!Continue!"=="y" (
    call :EditNameSubroutine
  )
)

cls
echo You changed the name of !numnam! files
echo You can view the names that were changed
echo in the Renamelog.txt file located at
echo %origdir%
echo.
echo Thank you for using Renamer v1.1
echo.
ping 1.1.1.1 -n 1 -W 10000>nul
goto eof


:targets
:loop
cls
echo Is the directory path in the targetdirectory.txt file?
set /p yn1={y,n}
cls

if /i "%yn1%"=="y" (
  set /p tardir=<targetdirectory.txt
) else (
  echo Type full path of target directory
  set /p tardir=
)
if exist %tardir% (
  cd %tardir%
) else (
  echo Target does not exist
  echo PLEASE try again
  ping 1.1.1.1 -n:1 -w:3000>nul
  goto loop
)

echo Is there a target string you want to enter?
set /p yn2={y,n}
if /i "%yn2%"=="y" (
  echo.
  echo Type target string for renaming
  set /p tarstr=[Target]
  set tarstr="*!tarstr!*"
  cls
  goto addtarstrques
) else (
  set tarstr=*
  goto eof
)

:addstring
cls
set /p addstr=[Target]
set addstr="*%addstr%*"
set tarstr=%addstr% %tarstr%
echo Searching for strings: %tarstr%
:addtarstrques
echo.
echo Is there an additional string you wish to look for?
set /p yn3={y,n}
if /i "%yn3%"=="y" goto addstring
goto eof


:startstring
:startloop
cls
echo Is there a standard starting string
echo to the naming convention?
set /p yn4={y,n}
if /i "%yn4%"=="y" (
  cls
  echo Enter standard start string 
  echo [Include an ending space if desired]
  echo.
  set /p startstr=
) else (
  set startstr=
  goto eof
)
echo The current start string is "%startstr%"
echo Is this okay?
set /p yn5={y,n}
if /i "%yn5%"=="n" (
  set startstr=
  goto startloop
)
goto eof


:endstring
cls
echo Is there a standard ending string to the naming convention?
set /p yn5={y,n}
if /i "%yn5%"=="n" (
  set endstr=
  goto eof 
)
cls
echo Would you like the end string to
echo include the date the file was created
set /p DateEnd=[y,n]
cls
if /i "%DateEnd%"=="y" call :DateEndFormatting
cls
echo Would you like the end string to include
echo today's date
set /p yn6={y,n}
cls
echo Enter standard end string
echo [Include spaces if desired]
set /p origendstr=
if /i "%yn6%"=="y" call :DateTodayFormatting
if "%DateEnd%"=="y" set origendstr=%origendstr%[date created]
echo The current end string is "%origendstr%"
echo Is this okay?
set /p yn7={y,n}
if /i "%yn7%"=="n" (
  set origendstr=
  goto endstring
)
if /i "%DateEnd%"=="y" set origendstr=%origendstr:~0,-14%
goto eof


:DateEndFormatting
echo In what format would you like the
echo date to appear:
echo.
echo 1. dd Mmm yy
echo.
echo 2. yyyymmdd
echo.
echo 3. Mmm dd, yyyy
echo.
echo 4. mm/dd/yy
echo.
echo 5. More...
echo.
set /p DateEndForm=Selection {1-5}-
if "%DateEndForm%"=="5" goto more
goto dateendskip
:more
cls
echo 6. dd Mmm yyyy
echo.
echo 7. yy/mm/dd
echo.
echo 8. mm/dd/yyyy
echo.
echo 9. yymmdd
echo.
set /p DateEndForm=Selection {6-9}-
:dateendskip
goto eof


:DateTodayFormatting
echo In what format would you like the
echo date to appear:
echo.
echo 1. dd Mmm yy
echo.
echo 2. yyyymmdd
echo.
echo 3. Mmm dd, yyyy
echo.
echo 4. mm/dd/yy
echo.
echo 5. More...
echo.
set /p DateTodayForm=Selection {1-5}-
if "%DateTodayForm%"=="5" goto more
goto settodayform
:more
cls
echo 6. dd Mmm yyyy
echo.
echo 7. yy/mm/dd
echo.
echo 8. mm/dd/yyyy
echo.
echo 9. yymmdd
echo.
set /p DateTodayForm=Selection {6-9}-
:settodayform
if "%date:~4,2%"=="01" set todaymonth=Jan
if "%date:~4,2%"=="02" set todaymonth=Feb
if "%date:~4,2%"=="03" set todaymonth=Mar
if "%date:~4,2%"=="04" set todaymonth=Apr
if "%date:~4,2%"=="05" set todaymonth=May
if "%date:~4,2%"=="06" set todaymonth=Jun
if "%date:~4,2%"=="07" set todaymonth=Jul
if "%date:~4,2%"=="08" set todaymonth=Aug
if "%date:~4,2%"=="09" set todaymonth=Sep
if "%date:~4,2%"=="10" set todaymonth=Oct
if "%date:~4,2%"=="11" set todaymonth=Nov
if "%date:~4,2%"=="12" set todaymonth=Dec
if "%DateTodayForm%"=="1" set origendstr=%origendstr%%date:~7,2% %todaymonth% %date:~12%
if "%DateTodayForm%"=="2" set origendstr=%origendstr%%date:~10%%date:~4,2%%date:~7,2%
if "%DateTodayForm%"=="3" set origendstr=%origendstr%%todaymonth% %date:~7,2%, %date:~10%
if "%DateTodayForm%"=="4" set origendstr=%origendstr%%date:~4,6%%date:~12%
if "%DateTodayForm%"=="6" set origendstr=%origendstr%%date:~7,2% %todaymonth% %date:~10%
if "%DateTodayForm%"=="7" set origendstr=%origendstr%%date:~12%/%date:~4,5%
if "%DateTodayForm%"=="8" set origendstr=%origendstr%%date:~4%
if "%DateTodayForm%"=="9" set origendstr=%origendstr%%date:~12,2%%date:~4,2%%date:~7,2%
goto eof


:DateEndSet
if "!FileDate:~0,2!"=="01" set month=Jan
if "!FileDate:~0,2!"=="02" set month=Feb
if "!FileDate:~0,2!"=="03" set month=Mar
if "!FileDate:~0,2!"=="04" set month=Apr
if "!FileDate:~0,2!"=="05" set month=May
if "!FileDate:~0,2!"=="06" set month=Jun
if "!FileDate:~0,2!"=="07" set month=Jul
if "!FileDate:~0,2!"=="08" set month=Aug
if "!FileDate:~0,2!"=="09" set month=Sep
if "!FileDate:~0,2!"=="10" set month=Oct
if "!FileDate:~0,2!"=="11" set month=Nov
if "!FileDate:~0,2!"=="12" set month=Dec
if "%DateEndForm%"=="1" set endstr=%origendstr%!FileDate:~3,2! !month! !FileDate:~8,2!
if "%DateEndForm%"=="2" set endstr=%origendstr%!FileDate:~6,4!!FileDate:~0,2!!FileDate:~3,2!
if "%DateEndForm%"=="3" set endstr=%origendstr%!month! !FileDate:~3,2!, !FileDate:~6,2!
if "%DateEndForm%"=="4" set endstr=%origendstr%!FileDate:~0,6!!FileDate:~8,2!
if "%DateEndForm%"=="6" set endstr=%origendstr%!FileDate:~3,2! !month! !FileDate:~6,2!
if "%DateEndForm%"=="7" set endstr=%origendstr%!FileDate:~8,2!!FileDate:~0,5!
if "%DateEndForm%"=="8" set endstr=%origendstr%!FileDate:~0,10!
if "%DateEndForm%"=="9" set endstr=%origendstr%!FileDate:~8,2!!FileDate:~0,2!!FileDate:~3,2!
goto eof


:SetOldFilePath
set OldFilePath=!OldFilePath:~-25,-1!
:filepathloop
echo !OldFilePath! | find "\" >nul
if errorlevel 1 goto eof
set OldFilePath=!OldFilePath:~1!
goto filepathloop


:setcaps
set NewName=!NewName:A=a!
set NewName=!NewName:B=b!
set NewName=!NewName:C=c!
set NewName=!NewName:D=d!
set NewName=!NewName:E=e!
set NewName=!NewName:F=f!
set NewName=!NewName:G=g!
set NewName=!NewName:H=h!
set NewName=!NewName:I=i!
set NewName=!NewName:J=j!
set NewName=!NewName:K=k!
set NewName=!NewName:L=l!
set NewName=!NewName:M=m!
set NewName=!NewName:N=n!
set NewName=!NewName:O=o!
set NewName=!NewName:P=p!
set NewName=!NewName:Q=q!
set NewName=!NewName:R=r!
set NewName=!NewName:S=s!
set NewName=!NewName:T=t!
set NewName=!NewName:U=u!
set NewName=!NewName:V=v!
set NewName=!NewName:W=w!
set NewName=!NewName:X=x!
set NewName=!NewName:Y=y!
set NewName=!NewName:Z=z!
:caps
cls
echo !NewName!
echo.
set /p caps=How many capital letters?
if "!caps!"=="0" goto eof
for /l %%i in (1,1,!caps!) do (
  cls
  echo Capital LETTER %%i
  echo !NewName!
  echo 012345678911111111112222222222333333333344444444445555555555
  echo           01234567890123456789012345678901234567890123456789
  set /p capoff=At Position-
  set /a endcap=!capoff!+1
  call set before=%%NewName:~0,!capoff!%%
  call set capletter=%%NewName:~!capoff!,1%%
  call set after=%%NewName:~!endcap!%%

  set capletter=!capletter:a=A!
  set capletter=!capletter:b=B!
  set capletter=!capletter:c=C!
  set capletter=!capletter:d=D!
  set capletter=!capletter:e=E!
  set capletter=!capletter:f=F!
  set capletter=!capletter:g=G!
  set capletter=!capletter:h=H!
  set capletter=!capletter:i=I!
  set capletter=!capletter:j=J!
  set capletter=!capletter:k=K!
  set capletter=!capletter:l=L!
  set capletter=!capletter:m=M!
  set capletter=!capletter:n=N!
  set capletter=!capletter:o=O!
  set capletter=!capletter:p=P!
  set capletter=!capletter:q=Q!
  set capletter=!capletter:r=R!
  set capletter=!capletter:s=S!
  set capletter=!capletter:t=T!
  set capletter=!capletter:u=U!
  set capletter=!capletter:v=V!
  set capletter=!capletter:w=W!
  set capletter=!capletter:x=X!
  set capletter=!capletter:y=Y!
  set capletter=!capletter:z=Z!

  set NewName=!before!!capletter!!after!
)
cls
echo !NewName!
echo.
echo Are there any additional caps needed?
set /p yn14={y,n}
if /i "%yn14%"=="y" goto caps
goto eof


:EditNameSubroutine
:editname
cls
echo !OldName!
echo 012345678911111111112222222222333333333344444444445555555555
echo           01234567890123456789012345678901234567890123456789
echo.
set /p NameStart=Enter Start Position-
set /p NameEnd=Enter End Position-
set /a NameLength=1+!NameEnd!-!NameStart!

if /i "%DateEnd%"=="y" call :DateEndSet else set endstr=%origendstr%

call set NewName=%%OldName:~!NameStart!,!NameLength!%%

cls
echo !NewName!
echo Would you like to make changes to this part
echo {Start and end strings will be added later}
echo.
set /p yn10={y,n}
if /i "!yn10!"=="y" (
  call :setcaps

  cls
  echo !NewName!
  echo.
  echo Would you like to insert anything into the name
  set /p yn8={y,n}
  if /i "!yn8!"=="y" call :insertsubroutine

  cls
  echo !NewName!
  echo.
  echo Would you like to remove anything from the name
  set /p yn12={y,n}
  if /i "!yn12!"=="y" call :removesubroutine
)
cls
echo !NewName!
echo.
echo Do you need to make any other changes?
echo.
set /p yn15={y,n}
if "%yn15%"=="y" goto editname

set NewName=!startstr!!NewName!!endstr!!Extension!

cls
echo.
echo !NewName!
echo.
echo Is this correct
set /p yn9={y,n}
if /i "!yn9!"=="y" (
  echo !NewName! from !OldName!!Extension! >>%origdir%\Renamelog.txt
  ren "!OldFilePathAndName!" "!NewName!"
  set /a numnam=!numnam!+1
) else (
  cls
  echo Would you like to try again
  echo.
  set /p yn12={y,n}
  if /i "!yn12!"=="y" goto editname
)
goto eof

:insertsubroutine
:insertsub
cls
echo  !NewName!
echo 012345678911111111112222222222333333333344444444445555555555
echo           01234567890123456789012345678901234567890123456789
echo To the **right** of what position would
echo you like to insert the string?
set /p strpos=Right of Position-
echo What would you like to insert
set /p stradd=[String]
call set NewName=%%NewName:~0,!strpos!%%!stradd!%%NewName:~!strpos!%%
cls
echo !NewName!
echo.
echo Is there anything else that needs to be added
set /p yn11={y,n}
if /i "!yn11!"=="y" goto insertsub
goto eof


:removesubroutine
:removesub
cls
echo  !NewName!
echo 012345678911111111112222222222333333333344444444445555555555
echo           01234567890123456789012345678901234567890123456789
echo What are the start and end positions
echo of the string to be removed?
echo.
echo Note that the start position should be
echo the last character that you want to stay
echo and the end position the last character
echo you want deleted
echo.
set /p remstpos=Start Position-
set /p remenpos=End Position-
call set NewName=%%NewName:~0,!remstpos!%%%%NewName:~!remenpos!%%
cls
echo !NewName!
echo.
echo Do you need to remove anything else
set /p yn13={y,n}
if /i "!yn13!"=="y" goto removesub
goto eofOf course that one is very long and complex to help allow for a lot of different USES with renaming. For what you are trying to do, try this:

Code: [Select]echo off
setlocal enabledelayedexpansion
set seq=1

for /f "delims=" %%a in ('dir *.png /s /b') do (
  set newname=0!seq!.png
  set newname=!newname:~-6!
  ren %%a !newname!
  set seq+=1
)
This only allows for 100 files to be renamed this way in a single directory, if you are wanting to have more, just change the number of zeros in the first "set newname" command and change the number in the second newname command.


Discussion

No Comment Found