I have scripted ReadReverse.bat to return the records in a text file in reverse order, from last to first.

The syntax for using ReadReverse.bat is:

for /f "Tokens=*" %%a in ('<b>ReadReverse</b> InputFile') do (
 @echo %%a
)
Where InputFile is the file name you wish to read in reverse order. %%a contains each returned record.

ReadReverse.bat contains:

@echo off
if \{%1\}==\{\} @echo Syntax: ReadReverse FileName&goto :EOF
if not exist %1 @echo Syntax: ReadReverse - %1 does not exist.&goto :EOF
setlocal EnableDelayedExpansion
set input=%1
set output="%TEMP%\ReadReverse_%RANDOM%.TMP"
if exist %output% del /q %output%
if exist "%TEMP%\ReadReverse.vbs" goto :doit
@echo.Dim objArguments, fso, readfile, contents, writefile, seq>"%TEMP%\ReadReverse.vbs"
@echo.Set objArguments = Wscript.Arguments>>"%TEMP%\ReadReverse.vbs"
@echo.input=objArguments(0)>>"%TEMP%\ReadReverse.vbs"
@echo.output=objArguments(1)>>"%TEMP%\ReadReverse.vbs"
@echo.set fso = CreateObject("Scripting.FileSystemObject")>>"%TEMP%\ReadReverse.vbs"
@echo.set readfile = fso.OpenTextFile(input, 1, false)>>"%TEMP%\ReadReverse.vbs"
@echo.set writefile = fso.CreateTextFile(output, 2)>>"%TEMP%\ReadReverse.vbs"
@echo.seq = 999999999>>"%TEMP%\ReadReverse.vbs"
@echo.Do until readfile.AtEndOfStream = True>>"%TEMP%\ReadReverse.vbs"
@echo.     contents = readfile.ReadLine>>"%TEMP%\ReadReverse.vbs"
@echo.     seq = seq + 1 >>"%TEMP%\ReadReverse.vbs"
@echo.     writefile.writeLine seq ^& "," ^& contents>>"%TEMP%\ReadReverse.vbs"
@echo.     loop>>"%TEMP%\ReadReverse.vbs"
@echo.readfile.close>>"%TEMP%\ReadReverse.vbs"
@echo.writefile.close>>"%TEMP%\ReadReverse.vbs"
:doit
cscript //nologo "%TEMP%\ReadReverse.vbs" %input% %output%
for /f "Tokens=1* Delims=," %%a in ('type %output%^|Sort /Reverse') do (
 @echo %%b
)
del /q %output%
endlocal