我有两个长达数千行的日志文件。我希望有一个脚本可以删除除最后一行之外的所有内容,比如说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.
我甚至不确定语法。请帮忙。感谢。
答案 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"