使用 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?
我是运行一个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?