有关如何回显或输入txt文件的最后10行的任何想法?
我正在运行服务器更改日志脚本以提示管理员说明他们正在做什么,因此我们可以跟踪更改.我正在尝试让脚本显示最后10个条目,以便了解最近发生的事情.我找到了一个处理最后一行的脚本,如下所示,但无法弄清楚要在其中更改哪些内容以显示最后10行.脚本:
@echo off setLocal EnableDelayedExpansion for /f "tokens=* delims= " %%a in (c:\log09.txt) do ( set var=%%a ) echo !var!
日志文件示例:
06/02/2009, 12:22,Remote=Workstation-9,Local=, mdb,bouncing box after updates,CAS-08754, ================= 07/02/2009, 2:38,Remote=,Local=SERVER1, mdb,just finished ghosting c drive,CAS-08776, ================= 07/02/2009, 3:09,Remote=,Local=SERVER1, mdb,audit of server,CAS-08776,
有什么想法吗?该脚本运行良好,只需要将更多行传输到屏幕即可.
希望这会拯救乔尔的眼睛:)
@echo OFF :: Get the number of lines in the file set LINES=0 for /f "delims==" %%I in (data.txt) do ( set /a LINES=LINES+1 ) :: Print the last 10 lines (suggestion to use more courtsey of dmityugov) set /a LINES=LINES-10 more +%LINES% < data.txt
这个答案结合了现有答案的最佳功能,并添加了一些曲折.
解决方案是tail命令的简单批处理实现.
第一个参数是文件名(可能带有路径信息 - 如果路径的任何部分包含空格或其他有问题的字符,请确保用引号括起来).
第二个参数是要打印的行数.
最后,可以附加任何标准的MORE选项:/ E/C/P/S/Tn.(有关更多信息,请参阅更多/?).
此外,可以指定/ N(无暂停)选项以使输出连续打印而不会暂停.
解决方案首先使用FIND快速计算行数.该文件通过重定向输入而不是使用filename参数传入,以消除FIND输出中文件名的打印输出.
要跳过的行数用SET/A计算,但如果小于0则将数字重置为0.
最后使用MORE在跳过不需要的行后打印出所需的行.除非将输出重定向到文件或通过管道传输到另一个命令,否则MORE将在每个屏幕的行数之后暂停./ N选项通过使用匹配所有行的正则表达式将MORE输出传递给FINDSTR来避免暂停.使用FINDSTR而不是FIND很重要,因为FIND可以截断长行.
:: tail.bat File Num [/N|/E|/C|/P|/S|/Tn]... :: :: Prints the last Num lines of text file File. :: :: The output will pause after filling the screen unless the /N option :: is specified :: :: The standard MORE options /E /C /P /S /Tn can be specified. :: See MORE /? for more information :: @echo OFF setlocal set file=%1 set "cnt=%~2" shift /1 shift /1 set "options=" set "noPause=" :parseOptions if "%~1" neq "" ( if /i "%~1" equ "/N" (set noPause=^| findstr "^") else set options=%options% %~1 shift /1 goto :parseOptions ) for /f %%N in ('find /c /v "" ^<%file%') do set skip=%%N set /a "skip-=%cnt%" if %skip% lss 0 set skip=0 more +%skip% %options% %file% %noPause%
您应该只是找到一个很好的实现tail
.但是,如果你真的坚持使用CMD批处理文件并希望在任何NT机器上运行,那么这将是有效的:
@echo off setLocal EnableDelayedExpansion for /f "tokens=* delims= " %%a in (c:\tmp\foo.txt) do ( set var9=!var8! set var8=!var7! set var7=!var6! set var6=!var5! set var5=!var4! set var4=!var3! set var3=!var2! set var2=!var1! set var1=!var! set var=%%a ) echo !var9! echo !var8! echo !var7! echo !var6! echo !var5! echo !var4! echo !var3! echo !var2! echo !var1! echo !var!