我有一個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
該代碼段這樣的伎倆......
for /F "delims=" %%a in (someFile.txt) do (
set "lastButOne=!lastLine!"
set "lastLine=%%a"
)
echo %lastButOne%
echo %lastLine%
編輯:完整TAIL.BAT添加
此方法可能會被修改爲了ge t可以由參數指定的更多行數。下面的文件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]!
2ND編輯: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]!
沒有併發症或臨時文件的好方法。雖然有更多的線要回顯,但會更棘手。 – 2014-12-11 19:10:20
@Kayasax:不是。看到編輯... – Aacini 2014-12-11 21:35:37
我覺得很頭疼......; – 2014-12-12 12:05:46
什麼碼你到目前爲止? – Lizz 2014-12-11 06:00:44
我什麼都沒有.. – Joshi 2014-12-11 06:01:05
如果你有權訪問Windows資源工具包,我一定會用['tail'](http://www.windows-commandline.com/tail-command-for-windows/)來做這個。 – 2014-12-11 06:50:28