user7818749
user7818749

Reputation:

Native cmd tail command for windows

I am looking to build a tail to read log files on windows using only native cmd.

There are various ways to to read a file:

type file.txt
more file.txt

They however do not have a default option to read updates from a file, so does not represent anything like tail.

Upvotes: 1

Views: 682

Answers (1)

user7818749
user7818749

Reputation:

With a few little hacks and using more to read the file, skipping what was already read before, we are able to tail the file, "almost" realtime.

@echo off & set cnt=0
if "%~1" == "" echo no file specified, usage: "tail.cmd <filename>"  & goto :eof
if not exist "%~1" echo file "%~1" does not exist & goto :eof
:tail_sub
2>nul (>>"%~1" echo off) && (goto :file) || (goto :tail_sub)
:file
for /f "tokens=1*delims=]" %%i in ('more "%~1" +%cnt% ^| find /v /n ""') do (
    set "line=%%j"
    set /a cnt+=1
    call echo(%%line%%
)
goto :tail_sub

Currently, without adding a timeout to slow down the infinite loop, it consumes around 5.6MB memory, which is very acceptable in my view. This does not yet take care of all special characters, like |<>&, but I will spend some time on this to cater for all scenarios I can think off.

Upvotes: 1

Related Questions