你好,我有一个日志文件,我创建和更新每小时,它运行了很多文件,因此它填补了非常快。
我想做的是每隔一段时间清除一次,只留下文件的最后30行。
我一直在尝试这样做了一段时间,我知道有“更多”命令,可以打印的行从n行。我想要的是使用该命令或类似的东西,但不是打印它,我希望它写入一个文件。
这是我目前得到的。
set LINES=0
for /f "delims==" %%I in (test2.txt) do (
set /a LINES=LINES+1
)
@echo
set /a LINES=LINES-30
more +%LINES% < test2.txt
5条答案
按热度按时间mwngjboj1#
使用一些简单的逻辑技巧:
(this还计数空行;保罗的方法忽略了他们。什么更好,取决于您的需求)
kadbb4592#
可能有一个更简单的解决方案,但这里有一个只是我立即想到的。
这里的技巧是计算行数并减去30,然后你得到你必须跳过的行数。
这是如何可以为您的需要。
monwx1rj3#
虽然@Stephan的答案可能是最好的方法,但我仍然想贡献一个答案,它依赖于问题的代码。
下面是原始代码的更正版本:
有两个问题:
1.阅读像
set /A
中的LINES
这样的变量或多或少等同于%LINES%
,但是这里需要delayed expansion和显式的!LINES!
扩展;1.在
delims=
选项中有一个=
太多(您不希望将=
指定为x1);但是,使用
for /F
实现仍然存在两个问题:for /F
不考虑空行,因此不计入;1.以
;
开头的行也被忽略,因为默认的eol=
选项;更新
如果稍微修改一下
set /A
的语法,就可以避免delayed expansion,并且可以克服有关空行和以;
开头的行的问题:cgfeq70w4#
下面是一个
tail.bat
,可以像传统的tail
命令一样使用。不,仍然没有-fqv
功能。gv8xihay5#
如果你知道机器/操作系统有可用的PowerShell,那么:
这样做对性能的影响可能会低得多,其他批处理方法依赖于阅读和计数批处理区域中的行-并不总是一个好主意。