如何使用批处理脚本减小日志文件的大小

时间:2014-04-26 23:07:38

标签: batch-file

我有两个长达数千行的日志文件。我希望有一个脚本可以删除除最后一行之外的所有内容,比如说51行(50个条目,最后一行是空白的) 我有这段代码:

for %%x in (*.log) do (
    for /f "skip=51 delims=*" %%l in ("%%x") do (
        echo. > tmp/%%x
    )
    move /Y tmp/%%x %%x
)

但它一直输出这个(两次,每个文件一个),没有其他事情发生

for /F "skip=51 delims=*" %l in ("main.log") do (echo.  1>tmp/main.log )
 move /Y tmp/main.log main.log
)
The system cannot find the path specified.

我甚至不确定语法。请帮忙。感谢。

2 个答案:

答案 0 :(得分:2)

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\106x"
SET "filemask=*.saved"
FOR %%x IN ("%sourcedir%\%filemask%") DO (
 sed -e :a -e "$q;N;52,$D;ba" "%%x" >"%temp%\x"
 MOVE /y "%temp%\x" "%%x"
)

GOTO :EOF

只是一些小事。

首先,目录分隔符是\ - /引入了开关。

其次,skip=51将跳过前51行 - 您要保存最后 51。

原生批次可以按照您的要求进行 - 但它会非常非常慢。

我在上面的批处理中使用了SED,根据您使用的语法,您应该对此很熟悉。它是DOS世界中的第三方实用程序 - 我使用GNU SED - Google是你的朋友。

答案 1 :(得分:1)

这使用名为findrepl.bat的帮助程序批处理文件 - 从https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat

下载

findrepl.bat放在与批处理文件相同的文件夹中或路径上。

它使用本机Windows脚本,并且在大型文件上非常强大且非常快。

findrepl  /o:-51 < "file.log"  >"file.tmp" & move /y "file.tmp" "file.log"