Search code examples
windowsbatch-filecmd

How to extract the last word from the last line of a TXT file through a batch script


I am trying to extract the last word from the last line of a txt file.
corner.txt

The result I want is just Cup$2!.

This is what I tried:

@echo off
SetLocal EnableDelayedExpansion
set L=1
for /F "tokens=2 delims=" %%a in (corner.txt) do (
  set line=%%a
  if !L!==7 set Line7=%%a
  set  /a  L=!L!+1
)

echo The word is %Line7%
pause

The result I'm getting is The word is.

What should I edit to get the above result?


Solution

  • Here's a quick example of how you could capture the substring you require, from reading your code, i.e. the last substring on the seventh line:

    @Echo Off
    SetLocal EnableExtensions DisableDelayedExpansion
        Set "var="
        For /F UseBackQ^ Skip^=7^ Delims^=^ EOL^= %%G In ("corner.txt") Do Set "var=%%~nxG" & GoTo Next
        If Not Defined var GoTo EndIt
    
        :Next
        SetLocal EnableDelayedExpansion
            Echo The word is !var!
        EndLocal
    
        :EndIt
        Echo Press any key to close . . .
        Pause 1>NUL
    EndLocal
    Exit /B
    

    If however, as your question title and body asks, you want the last substring of the last line, it's a little bit simpler:

    @Echo Off
    SetLocal EnableExtensions DisableDelayedExpansion
        Set "var="
        For /F UseBackQ^ Delims^=^ EOL^= %%G In ("corner.txt") Do Set "var=%%~nxG"
        If Not Defined var GoTo EndIt
        SetLocal EnableDelayedExpansion
            Echo The word is !var!
        EndLocal
    
        :EndIt
        Echo Press any key to close . . .
        Pause 1>NUL
    EndLocal
    Exit /B
    

    I will not however be explaining any of it, please use the search facility at the top of the page, and the output from the built in help for each of the commands I have used.