File 如何在批处理脚本中读取文件的最后2行

File 如何在批处理脚本中读取文件的最后2行,file,batch-file,batch-processing,File,Batch File,Batch Processing,我有一个Java程序,它在文件的最后两行追加新的构建信息。 如何在批处理文件中读取它们?这将解决问题,其中someFile.txt是您要从中读取行的文件: for /f %%i in ('find /v /c "" ^< someFile.txt') do set /a lines=%%i echo %lines% set /a startLine=%lines% - 2 more /e +%startLine% someFile.txt > temp.txt set vidx=0

我有一个Java程序,它在文件的最后两行追加新的构建信息。
如何在批处理文件中读取它们?

这将解决问题,其中someFile.txt是您要从中读取行的文件:

for /f %%i in ('find /v /c "" ^< someFile.txt') do set /a lines=%%i
echo %lines%
set /a startLine=%lines% - 2
more /e +%startLine% someFile.txt > temp.txt
set vidx=0
for /F "tokens=*" %%A in (temp.txt) do (
    SET /A vidx=!vidx! + 1
    set localVar!vidx!=%%A
)
echo %localVar1%
echo %localVar2%
del temp.txt
对于('find/v/c”“^temp.txt
设置vidx=0
对于(temp.txt)do中的/F“tokens=*”%%A(
SET/A vidx=!vidx!+1
设置localVar!vidx!=%%A
)
回显%localVar1%
回显%localVar2%
del temp.txt

此代码段实现了以下功能

for /F "delims=" %%a in (someFile.txt) do (
   set "lastButOne=!lastLine!"
   set "lastLine=%%a"
)
echo %lastButOne%
echo %lastLine%
编辑:添加了完整的TAIL.BAT

可以修改此方法以获得更多的行,这些行可以由参数指定。下面的文件是tail.bat

@echo off
setlocal EnableDelayedExpansion

rem Tail command in pure Batch: Tail.bat filename numOfLines
rem Antonio Perez Ayala

for /F "delims=" %%a in (%1) do (
   set /A i=%2, j=%2-1
   for /L %%j in (!j!,-1,1) do (
      set "lastLine[!i!]=!lastLine[%%j]!
      set /A i-=1
   )
   set "lastLine[1]=%%a"
)
for /L %%i in (%2,-1,1) do if defined lastLine[%%i] echo !lastLine[%%i]!
第二次编辑:添加了TAIL.BAT的新版本

以下版本更有效:

@echo off
setlocal EnableDelayedExpansion

rem Tail command in pure Batch, version 2: Tail.bat filename numOfLines
rem Antonio Perez Ayala

set /A firstTail=1, lastTail=0
for /F "delims=" %%a in (%1) do (
   set /A lastTail+=1, lines=lastTail-firstTail+1
   set "lastLine[!lastTail!]=%%a"
   if !lines! gtr %2 (
      set "lastLine[!firstTail!]="
      set /A firstTail+=1
   )
)
for /L %%i in (%firstTail%,1,%lastTail%) do echo !lastLine[%%i]!
直接从命令行:

C:\>set "file=C:\some.file"
C:\>set "last_lines=5"
C:\>(for /f %a in ('findstr /R /N "^" "%file%" ^| find /C ":"') do @set lines=%a)&@set /a m=lines-last_lines&call more +%m% "%file%"

到目前为止,你有什么代码?如果你有权访问Windows资源工具包,我肯定会用它来做。这是一个很好的方法,没有复杂的问题或临时文件。不过,如果有更多的线路可以回音,那就更麻烦了。我想头痛就要来了……;)
C:\>set "file=C:\some.file"
C:\>set "last_lines=5"
C:\>(for /f %a in ('findstr /R /N "^" "%file%" ^| find /C ":"') do @set lines=%a)&@set /a m=lines-last_lines&call more +%m% "%file%"