使用 robocopy 截断日志

truncate log with robocopy

我是运行一个robocopy进程,生成日志如下:

robocopy "\server1\reports" "c:\temp" /LOG+:"c:\scripts\logs\robolog-reports.txt"

日志文件创建正常。有什么方法可以限制日志文件的文件大小,最好是滚动日志以便只保存最新的 XX 行或 XX 字节?我想一次完成所有这些操作(robocopy),并有最后几天的 robocopy activity。

谢谢

从文件中获取最后 N 行的过程称为 tail。试试这个:

@echo off
setlocal

rem Update the robocopy report file
set "report=c:\scripts\logs\robolog-reports.txt"
robocopy "\server1\reports" "c:\temp" /LOG+:"%report%"

rem Keep the last N lines in the report
set lines=300
for /F %%a in ('find /C /V "" ^< "%report%"') do set "lastLine=%%a"
if %lastLine% leq %lines% goto :EOF
set /A firstLine=lastLine-lines
more +%firstLine% "%report%" > tempFile.tmp
move /Y tempFile.tmp "%report%"

无法在一个 robocopy 操作中直接执行此操作。

有同样的问题,用下面的脚本解决了:

echo off
chcp 1252
type %1| find "Gestartet:"  > robocopy_summary.log
type %1| find "Quelle :"    >> robocopy_summary.log
type %1| find "Ziel :"      >> robocopy_summary.log
type %1| find "Optionen:"  >> robocopy_summary.log
echo "-----------------------------------------------------------------------------" >> robocopy_summary.log
type %1| find "Insgesamt"  >> robocopy_summary.log
type %1| find "Verzeich.:" >> robocopy_summary.log
type %1| find "Dateien:"   >> robocopy_summary.log
type %1| find "Bytes"      >> robocopy_summary.log
type %1| find "Zeiten"     >> robocopy_summary.log
type %1| find "Geschwindigkeit:" >> robocopy_summary.log
type %1| find "Beendet:"   >> robocopy_summary.log
echo "-----------------------------------------------------------------------------" >> robocopy_summary.log

Robocopy 需要由 windows 调度程序 运行,比如每 60 分钟一次,robocopy 批处理文件中指向上述脚本的最后一个命令 "robocopy_summary.bat logfilename"

不是很聪明,但我想看的都在做。

我发现因为 robocopy 默认重试 1,000,000 次,所以如果有任何错误,通过用错误消息填充它可以使 Robocopy 日志文件变得巨大。通过限制重试次数(比如使用开关 /r:3),它可以使日志文件增长得更慢:

Why does robocopy retries 1000000 times?