有关如何回显或输入txt文件的最后10行的任何想法?
我正在运行服务器更改日志脚本以提示管理员说明他们正在做什么,因此我们可以跟踪更改.我正在尝试让脚本显示最后10个条目,以便了解最近发生的事情.我找到了一个处理最后一行的脚本,如下所示,但无法弄清楚要在其中更改哪些内容以显示最后10行.脚本:
@echo off
setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in (c:\log09.txt) do (
set var=%%a
)
echo !var!
Run Code Online (Sandbox Code Playgroud)
日志文件示例:
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,
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?该脚本运行良好,只需要将更多行传输到屏幕即可.
Pat*_*uff 18
希望这会拯救乔尔的眼睛:)
@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
Run Code Online (Sandbox Code Playgroud)
dbe*_*ham 12
这个答案结合了现有答案的最佳功能,并添加了一些曲折.
解决方案是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%
Run Code Online (Sandbox Code Playgroud)
Joe*_*sky 10
您应该只是找到一个很好的实现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!
Run Code Online (Sandbox Code Playgroud)
tail 命令有多种 Windows 实现。它应该正是你想要的。
这听起来特别好: http://malektips.com/xp_dos_0001.html
它们的范围从实时监控到文件的最后 x 行。
编辑:我注意到包含的链接是一个包它应该可以工作,但这里还有更多版本:
http://www.lostinthebox.com/viewtopic.php?f=5&t=3801 http://sourceforge.net/projects/tailforwin32