cmd.exe批处理脚本显示txt文件的最后10行

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (73)

有什么想法吗?如何回显或键入txt文件的最后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,

有什么想法吗?这个脚本工作得很好,只是需要它将更多的行输送到屏幕上。

提问于
用户回答回答于

这个答案结合了现有答案的最佳特性,并增加了一些曲折。

解决方案是尾命令的简单批处理实现。

第一个参数是文件名(可能带有路径信息--如果路径的任何部分包含空格或其他问题字符,请确保将其括在引号中)。

第二个参数是要打印的行数。

最后,可以附加任何标准的更多选项:/E/C/P/S/TN。(更多信息见更多/?)。

此外,还可以指定/N(无暂停)选项,以使输出不停顿地连续打印。

解决方案首先使用find快速计算行数。文件通过重定向输入传入,而不是使用文件名参数,以消除find输出中文件名的打印输出。

要跳过的行数用set/A计算,但如果小于0,则将其重置为0。

最后,在跳过不需要的行后,使用更多的方法打印出所需的行。在每个屏幕的行值之后,会有更多的内容暂停,除非输出被重定向到文件或管道到另一个命令。/N选项通过使用匹配所有行的正则表达式将更多的输出传递到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%
用户回答回答于

@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

扫码关注云+社区