与Windows等效的Unix tail命令。


410

我正在寻找与Unix“ tail”命令等效的命令,该命令可使我在写入日志文件时监视其日志输出。


这有帮助吗?http://malektips.com/xp_dos_0001.html http://commandwindows.com/server2003tools.htm 这是直接的Microsoft链接。我已经在我的机器上对其进行了测试(出于好奇,因为我可能需要它),并且它可以正常工作。
约翰尼,

1
XP 确实尾巴,只是微软没有将其安装在标准版本的XP中。他们将其打包在“ Windows Server 2003资源工具包工具”中。:您可以在这里microsoft.com/downloads/...
马特Poush

1
不exaclty愚弄的人,但在这里看到stackoverflow.com/questions/247234/...
马丁贝克特

mobaXTerm,它是免费的,并且有插件日志,您可以执行tail -f /drives/c/logs/mylog.log
surfealokesea

3
我不认为这应该已经关闭,因为我需要同样的东西来调试Windows应用程序中的跟踪。它是关于“程序员常用的软件工具”的,主题为
kristianp '18

Answers:


137

我建议为Win32安装类似GNU Utilities的工具。它具有最喜欢的食物,包括尾巴。


5
我只是试图tail在2GB的文件上使用GNU的文件,但它被阻塞了。 more工作正常(至少查看文件的开头)。
Eric J.

@EricJ。,对我也一样。在3GB的文件上,我可以,head但是不能tail
Alphaaa

@Alphaaa:我怀疑这与GNU Utilities使用的OS调用有关。参见stackoverflow.com/a/4003487/141172
Eric J.

@EricJ。,谢谢,这似乎确实有用。但是我只是意识到使用一种解决方法对我来说更容易:我将要编写一个简单的脚本来完成一个tail:)
Alphaaa

1
在这里,我相信这是一个更好的解决方案:stackoverflow.com/questions/4426442/...
阮晋勇

441

如果您使用PowerShell,则可以使用:

Get-Content filenamehere -Wait -Tail 30

从下方发布Stefan的评论,这样人们就不会错过

PowerShell 3引入了-Tail参数,仅包括最后x行


13
实际上这不是动态的
Jey Geethan 2010年

16
这是很好的了解;谢谢。但是我有一些问题(在Windows 7上)。(1)它显示整个文件(不适用于海量日志文件,这就是为什么tail有用)(2)它不像我想要的那样动态(可能是由于我的设置与其他张贴者之间的OS /文件系统发生了变化) ?)。也就是说,我确定Get-Content有时所做的外壳程序直到dir在另一个外壳程序中运行后才会更新。
mpontillo 2011年

10
我认为值得一提的是,如果在终端窗口中选择某些内容,PowerShell将暂停滚动/输出,以便您有机会阅读,复制/粘贴等内容。如果按Enter,它将继续滚动。
cbednarski

18
PowerShell 3引入了-Tail参数,仅包括最后x行
Stefan Haberl,2013年

8
因此,Powershell的正确答案应该不是这样Get-Content -Tail 100 -Wait .\logfile.log吗?
Henno Vermeulen

62

我一直在Windows中使用Baretail进行跟踪。它是免费的,非常不错。

编辑:有关Baretail的更好描述,请参见此问题


这最终成为在[gulp] Windows Server 2003 R2 SP1上为我工作的第一个解决方案!超级轻松的安装程序,开箱即用,可用于拖尾:)
cellepo 2013年

通过HTTP下载并执行未签名的可执行文件可能不是一个好主意。至少,应该通过其HTTPS网站下载。
Zero3's

我感到惊讶的是,他们一直维护该站点并更新SSL证书,而该软件自2006年以来未进行升级。正是我所需要的。Windows Defender找不到威胁。
Lionet Chen


24

使用批处理命令对DOS CMD尾部感兴趣的任何人(请参见下文)。

这不是完美的,有时会重复行。

用法:tail.bat -d tail.bat -f -f

@echo off
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
rem tail.bat -d <lines> <file>
rem tail.bat -f <file>

rem ****** MAIN ******
IF "%1"=="-d" GOTO displayfile
IF "%1"=="-f" GOTO followfile

GOTO end

rem ************
rem Show Last n lines of file
rem ************

:displayfile
SET skiplines=%2
SET sourcefile=%3

rem *** Get the current line count of file ***
FOR /F "usebackq tokens=3,3 delims= " %%l IN (`find /c /v "" %sourcefile%`) DO (call SET find_lc=%%l)

rem *** Calculate the lines to skip
SET /A skiplines=%find_lc%-!skiplines!

rem *** Display to screen line needed
more +%skiplines% %sourcefile%

GOTO end

rem ************
rem Show Last n lines of file & follow output
rem ************

:followfile
SET skiplines=0
SET findend_lc=0
SET sourcefile=%2

:followloop
rem *** Get the current line count of file ***
FOR /F "usebackq tokens=3,3 delims= " %%l IN (`find /c /v "" %sourcefile%`) DO (call SET find_lc=%%l)
FOR /F "usebackq tokens=3,3 delims= " %%l IN (`find /c /v "" %sourcefile%`) DO (call SET findend_lc=%%l)

rem *** Calculate the lines to skip
SET /A skiplines=%findend_lc%-%find_lc%
SET /A skiplines=%find_lc%-%skiplines%

rem *** Display to screen line when file updated
more +%skiplines% %sourcefile%

goto followloop

:end

这很聪明,如果无法下载工具,我将全力利用现有功能!这段代码会吞噬CPU,因为它会不断旋转-f。
armstrhb

1
在下载和吃cpu时遇到了同样的问题!ping 127.0.0.1 -n 2 > nul在之前添加了此行goto followloop。它会发送两次ping,并在1秒之间等待1秒。:D
Mohsen ZareZardeyni

太棒了!非常感谢
John Fairbanks

1
如果可以利用,为什么还要使用ping timeout /t 2
namezero '18

23

有很多选项,但是所有选项都具有更高级功能的缺陷。

  • 尾部的GnuWin32是越野车(α β γ) -比如-f只是简单的不工作。

  • UnxUtils的尾部似乎更好(-f可以工作,但--pid似乎不行,-n但--lines = n不能使-f失败),但似乎是一个无效的项目。

  • Cygwin是一个非常丑陋的应用程序,可能只使用DLL和coreutils软件包 -但仍然存在--pid之类的问题,无法与本机win32进程一起使用。


19

我用过Windows的Tail。当然不如使用优雅

尾巴
但是然后,您正在使用Windows。;)


我第二个Windows尾巴。我喜欢它,因为我可以在同一窗口中打开和监视多个文件。
保罗

如果您使用的是Posh 1或Posh 2.x,powershell gc -tail方法将不起作用。在Posh 3.0中添加了gc -tail功能。
user1390375


15

在这里的答案中,我还没有看到Log Expert。

它是可定制的,非常适合处理日志文件。到目前为止,对我来说,它是最好的Windows图形日志查看器。

不幸的是,该软件不再可用。您可以在archive.org上阅读有关它的信息。


我喜欢Log Expert的功能,但是我在Win 7 64位上遇到过很多麻烦。
粘土

我想念“清晰视野”功能。
DanielHári2015年

13

如果您根本不想安装任何东西,则可以“构建自己的”批处理文件,该文件可以通过标准Windows命令执行此工作。这里有一些有关如何做的指示。

1)使用find / c / v“” yourinput.file,获取输入文件中的行数。输出类似于:

---------- T.TXT: 15

2)使用/ f,解析此输出以获取数字15。

3)使用set / a,计算需要跳过的标题行数

4)使用/ f“ skip = n”跳过头行并回显/处理尾行。

如果有时间,我将构建一个批处理文件并将其发回到此处。

编辑: tail.bat

REM tail.bat
REM
REM Usage: tail.bat <file> <number-of-lines> 
REM
REM Examples: tail.bat myfile.txt 10
REM           tail.bat "C:\My File\With\Spaces.txt" 10

@ECHO OFF
for /f "tokens=2-3 delims=:" %%f in ('find /c /v "" %1') do (
    for %%F in (%%f %%g) do set nbLines=%%F )
set /a nbSkippedLines=%nbLines%-%2
for /f "usebackq skip=%nbSkippedLines% delims=" %%d in (%1) do echo %%d

5
这是前面的说明的批次。它显示当前文件的最后10行:____ / f“ tokens = 3” %% f in('find / c / v“”%0')in set nbLines = %% f ____ set / a nbSkippedLines = / f的%nbLines%-10 ____“ skip =%nbSkippedLines%delims =”(%0)中的%% d会回显%% d
Nicolas

1
这正是发布者想要的,并且效果很好。
成龙

感谢您的代码!我将其添加到具有正确参数编号的答案中,并在行数上增加了一个。注意,它将在出口处显示行。PS:我用它拖了一个1.5Gb的文件,并在15秒内得到了结果。
Leopoldo Sanczyk

实际上,在第4步中,我认为最好使用命令“ more”,该命令接受有关要跳过的行数的参数。我想会更快。
Philibert Perusse '19

8

我最近使用过Mtail,它似乎运作良好。这是GUI类型,如上面提到的裸尾。 在此处输入图片说明



5

尝试 Windows Services for UNIX。提供贝壳,awk,sed等以及尾巴。

更新 -:不幸的是,自2019年起,该系统不再在Microsoft下载中心提供。


1
这在Win7和更高版本上存在问题。
道格·威尔逊

1
真?您正在投票否定四年的老答案吗?贡献的方式。
戴夫

9
@戴夫:即使问题很旧,人们仍在寻找最佳答案。如果甚至将近5年前的答案都不再有意义或不再有用,那为什么不应该投票否决呢?整个网站是关于更快地获取有价值的信息的-今天,而不是5年前。
奥利弗·

1
@Hellfire-您应该编辑答案,但条件是它不适用于Wwindows7。仅评论是很愚蠢的。
Preet Sangha 2014年

4

我更喜欢TailMe,因为可以在一个窗口中同时观看多个日志文件:http ://www.dschensky.de/Software/Staff/tailme_en.htm




4

DOS的type工作方式与* nux的类似cat,尽管cat它确实会转储整个文件,所以它并不是真正的true tail,但是可以在不下载或安装真正tail替代品的情况下立即使用。


4

我只是写了这个小批处理脚本。它不像Unix的“ tail”那样复杂,但是希望有人可以对其进行改进,例如将输出限制为文件的最后10行,等等。如果确实要改进此脚本,请发送该脚本在抢劫〜[at]〜gmail.com时对我说。

@echo off

:: This is a batch script I wrote to mimic the 'tail' UNIX command.
:: It is far from perfect, but I am posting it in the hopes that it will
:: be improved by other people. This was designed to work on Windows 7.
:: I have not tested it on any other versions of Windows

if "%1" == "" goto noarg
if "%1" == "/?" goto help
if "%1" == "-?" goto help
if NOT EXIST %1 goto notfound
set taildelay=%2
if "%taildelay%"=="" set taildelay=1

:loop
cls
type %1

:: I use the CHOICE command to create a delay in batch.

CHOICE /C YN /D Y /N /T %taildelay%
goto loop

:: Error handlers

:noarg
echo No arguments given. Try /? for help.
goto die

:notfound
echo The file '%1' could not be found.
goto die

:: Help text

:help
echo TAIL filename [seconds]

:: I use the call more pipe as a way to insert blank lines since echo. doesnt
:: seem to work on Windows 7

call | more
echo Description:
echo     This is a Windows version of the UNIX 'tail' command.
echo     Written completely from scratch by Andrey G.
call | more
echo Parameters:
echo    filename             The name of the file to display
call | more
echo    [seconds]            The number of seconds to delay before reloading the
echo                         file and displaying it again. Default is set to 1
call | more
echo ú  /?                   Displays this help message
call | more
echo    NOTE:
echo    To exit while TAIL is running, press CTRL+C.
call | more
echo Example:
echo    TAIL foo 5
call | more
echo    Will display the contents of the file 'foo',
echo    refreshing every 5 seconds.
call | more

:: This is the end

:die

使用“类型”命令是个好主意,但您无法通过管道传递给它!
eadmaster

这只是保持重新加载文本文件。

echo的批处理版本具有奇怪的行为,如果未提供任何参数,则只会退出,但是如果echo.以单词上的尾随点的方式调用该命令(而不是作为单独的参数),它将打印一行新行。
scragar




3

Far Manager中,按F3一个文件以进入标准查看器,然后按End按键导航到文件末尾。

如果文件已更新,则Far Manager会自动滚动它。



0

图形化日志查看器虽然非常适合查看日志文件,但不能满足可用于脚本(或批处理文件)的命令行实用程序的需求。通常,这种简单通用的命令可用作特定环境的专用解决方案的一部分。图形方法不能轻易地用于这种用途。



0

我想我已经找到了可以满足批处理文件中tail函数需求的实用程序。它叫做“ mtee”,它是免费的。我已经将其合并到正在处理的批处理文件中,并且可以很好地完成工作。只需确保将可执行文件放入PATH语句中的目录中,然后就可以走了。

这里是链接:

Mtee

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.