我有一个 robocopy 脚本来备份我们每晚运行的 Kiln 存储库,它看起来像这样:
robocopy "$liveRepoLocation" "$cloneRepoLocation" /MIR /MT /W:3 /R:100 /LOG:"$backupLogLocation\BackupKiln.txt" /NFL /NDL /NP
在输出中,有大量包含“额外文件”的行,如下所示:
*EXTRA File 153 E:\Kiln Backup\elasticsearch\data\elasticsearch-kiln\nodes\0\indices\kiln-2\0\index\_yxe.fdt
*EXTRA File 12 E:\Kiln Backup\elasticsearch\data\elasticsearch-kiln\nodes\0\indices\kiln-2\0\index\_yxe.fdx
*EXTRA File 128 E:\Kiln Backup\elasticsearch\data\elasticsearch-kiln\nodes\0\indices\kiln-2\0\index\_yxe.fnm
*EXTRA File 363 E:\Kiln Backup\elasticsearch\data\elasticsearch-kiln\nodes\0\indices\kiln-2\0\index\_yxe.frq
*EXTRA File 13 E:\Kiln Backup\elasticsearch\data\elasticsearch-kiln\nodes\0\indices\kiln-2\0\index\_yxe.nrm
此外,底部有数百行仅包含“100%”,如下所示:
100%
100%
100%
100%
100%
100%
100%
除了使日志文件变得非常庞大(Kiln 存储库中有很多文件夹/文件)之外,不时扫描日志以查看一切是否正常运行也很烦人。
- 如何阻止“额外文件”出现在日志中?(编辑:整行,而不仅仅是文本,因为/NC 将停止)
- 我怎样才能阻止这些愚蠢的“100%”行出现在日志中?
我已经尝试了我能想到的所有开关组合(当前开关在上面的命令中列出),但似乎都无法隐藏这些!
答案1
刚刚注意到你那里缺少一个 /NC。
/NC:无类别 – 不记录文件类别。
类文件是...robocopy 中的 tweaked、lonely 和 extra 是什么意思?
所以我会尝试: robocopy "$liveRepoLocation" "$cloneRepoLocation" /MIR /MT /W:3 /R:100 /NP /LOG:"$backupLogLocation\BackupKiln.txt" /NC
编辑1
我的错。我没有看到你已经提到尝试/NC
我在这里测试过。看来 /MIR 选项忽略了日志记录选项。此外 /MT 也搞乱了它,添加了 100%。
我找到工作的唯一方式是
D:\robocopy>robocopy 源目标 /MIR /W:3 /R:100 /NS /NC /NFL /NDL /NP /LOG:log.txt"。
*它实际上与 /MIR 一起使用。但您必须指定 /NFL和/NDL。* 不知道您是否可以接受这一点。
如果你尝试/MT,它仍然会显示愚蠢的 100%
编辑2
我知道问题是关于 Robocopy 的,但我认为你应该试试 RichCopy http://technet.microsoft.com/en-us/magazine/2009.04.utilityspotlight.aspx
这是命令行:
richcopy “D:\robocopy\source” “D:\robocopy\destination” /P /QO /QP “D:\robocopy\report.log” /UE /US /UD /UPC /UFC /USC /UPR /UET
它启动 RichCopy 的 GUI 并在完成后关闭。
以下是日志
28/11/2012 11:35:19,0,复制开始,
28/11/2012 11:35:20,0,源路径:D:\robocopy\source,
28/11/2012 11:35:20,0,目标路径:d:\robocopy\destination,
28/11/2012 11:35:20,0,源文件数:12 个文件,
28/11/2012 11:35:20,0,复制文件数:13 个文件,
28/11/2012 11:35:20,0,清除的文件数:1,224 个文件,
2012 年 11 月 28 日 11:35:20,0,已用时间 : 00:00:01,
28/11/2012 11:35:20,0,平均性能:1,641,528 字节/秒,
28/11/2012 11:35:20,0,平均性能:13 个文件/秒,
28/11/2012 11:35:20,0,复制完成,D:\robocopy\source
答案2
此/XX
选项排除了列出的额外文件。奇怪的是,此选项列在File Selection
选项中,而不是。我猜Logging
它与日志记录选项相反。/X
答案3
我认为这可能有效:
robocopy sourceDir targetDir *.* /njh /njs /ndl /np | find /v "*EXTRA File"
因此,只需将输出通过管道传输到“find”,并使用 /V 排除包含指定文本“*Extra File”的行。
答案4
如何使用开关
/MIR /MT /W:3 /R:100 /NFL /NDL /NP 2>&1 | findstr /v /L /C:" * EXTRA " | findstr /v /L /C:"100%%" > "log file name with or without path"
所以你有了
robocopy "$liveRepoLocation" "$cloneRepoLocation" /MIR /MT /W:3 /R:100 /NFL /NDL /NP 2>&1 | findstr /v /L /C:" * EXTRA " | findstr /v /L /C:"100%%" > "$backupLogLocation\BackupKiln.txt"
- 搜索字符串中必须有双 %% 才能包含 %
- 这2>&1将 stderr 流重定向到 stdout,因为某些消息被写入 stderr,并且我们希望像 /LOG 开关一样捕获这些行。
- 带有 /v 开关的 2 个 findstr 命令查找所有不包含搜索字符串的行
- 这> “日志文件名”将最终输出重定向到日志文件。如果您通常使用/日志:+然后使用>> “日志文件名”反而
注意:如果您在 powershell 脚本中使用它(就像您似乎所做的那样),则需要使用 findstr 而不是 find,就像在 .bat 或 .cmd 文件中一样。请注意,find 不支持 /L 和 /C:,但对于 find 命令来说,它们不是必需的。