Search code examples
batch-filefile-renamebatch-rename

batch file remove X characters of filename


I did batch file which copy 3 files and need to rename it by removing last 33 characters. The copy works fine but removing last 33 characters not... I saw more then one answer on web and try it all but nothing work so far.

My batch file look like this:

for /f "delims=" %%i in ("my folder")  do (
    ren "%%i" "%i:~0,-33%".txt
)

I tried already:

set fName=%%i
ren "%fName%" "%fName:~0,-33%.txt"

Solution

  • From the information I got here, try this:

    @echo off
    setlocal enabledelayedexpansion
    
    set "folderpath=[Your Folder Here...]"
    cd %folderpath%
    for /f %%a in ('dir /b "*.txt"') do (
       set "fname=%%~na"
       ren "%%a" "!fname:~0,-33!.txt"
    )
    endlocal
    

    This is similar to the answer above. You should make sure the batch file is OUTSIDE the folder.

    EDIT. When dealing with variables formed inside FOR and IF's, use delayed expansion (i.e. !var!, instead of %var%). Anyway, this is the fixed code:

    @echo off
    setlocal enabledelayedexpansion
    
    ::NO Last Backslash...
    set "sourcepath=C:\Users\tzahi.k\Desktop\testSource\source2"
    set "folderpath=C:\Users\tzahi.k\Desktop\testSource\des"
    
    for /F "delims=" %%a in ('dir /b /od "%sourcepath%\*.txt"') do (
       set "youngest=%%a"
       xcopy /y "%sourcepath%\!youngest!" "%folderpath%"
    )
    
    cd /d %folderpath%
    for /f %%a in ('dir /b "*.txt"') do (
        set "fname=%%~na"
        ren "%%a" "!fname:~0,-33!.txt"
    )
    endlocal
    pause