Just to ensure that my idea of what you are trying to achieve is correct, here's the TEST.TXT for my examples: I_AM_A_LINE_WITH_A_TRAILING_UNDERSCORE_ I_AM_A_LINE_WITH_TWO_TRAILING_UNDERSCORES__ I_AM_A_LINE I_AM_A_LINE_TOO I AM ANOTHER LINE WITH A TRAILING UNDERSCORE_ I AM ANOTHER LINE WITH TWO TRAILING UNDERSCORES TOO__ I AM ANOTHER LINE I AM ANOTHER LINE TOO As shown by IcemanND, the best way is to use a subroutine, I include this mainly due to an error in Ice's example: @ECHO OFF&SETLOCAL FOR /F "DELIMS=" %%? IN (TEST.TXT) DO CALL :SUB "%%?" PAUSE&ENDLOCAL&GOTO :EOF :SUB SET "VAR=%~1" IF %VAR:~-1%==_ ECHO/ %VAR%&ECHO/ Changes To&ECHO/ %VAR:~0,-1%&ECHO/In order to grab only lines ending with an underscore, I suggest using findstr. @ECHO OFF&SETLOCAL FOR /F "DELIMS=" %%? IN ('FINDSTR/E "_" TEST.TXT') DO CALL :SUB "%%?" PAUSE&ENDLOCAL&GOTO :EOF :SUB SET "VAR=%~1" ECHO/ %VAR%&ECHO/ Changes To&ECHO/ %VAR:~0,-1%&ECHO/Here is an example using delayed expansion @ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION FOR /F "DELIMS=" %%? IN ('FINDSTR/E "_" TEST.TXT') DO ( SET "VAR=%%?"&&ECHO/ !VAR!&ECHO/ Changes To&ECHO/ !VAR:~0,-1!&ECHO/) PAUSE&ENDLOCAL&GOTO :EOFI hope this helps you a little better!