如何隐藏 robocopy 输出中的“额外文件”和“100%”行?

如何隐藏 robocopy 输出中的“额外文件”和“100%”行?

我有一个 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 存储库中有很多文件夹/文件)之外,不时扫描日志以查看一切是否正常运行也很烦人。

  1. 如何阻止“额外文件”出现在日志中?(编辑:整行,而不仅仅是文本,因为/NC 将停止)
  2. 我怎样才能阻止这些愚蠢的“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 命令来说,它们不是必需的。

相关内容