如何使robocopy在命令行中保持静默,除了进度条以外?

145
我正在使用PowerShell脚本通过robocopy进行备份,它非常棒,但我希望在复制时只显示进度百分比,而不是所有其他信息。其他信息会使命令窗口混乱,我希望它简洁明了,以便轻松查看备份的总体进度。这个可行吗?
9个回答

261
我添加了以下两个参数: /np /nfl 所以与AndyGeek的答案中的5个参数一起,这些参数是 /njh /njs /ndl /nc /ns,你将得到以下结果,并且静音: ROBOCOPY [源] [目标] /NFL /NDL /NJH /NJS /nc /ns /np
/NFL : No File List - don't log file names.
/NDL : No Directory List - don't log directory names.
/NJH : No Job Header.
/NJS : No Job Summary.
/NP  : No Progress - don't display percentage copied.
/NS  : No Size - don't log file sizes.
/NC  : No Class - don't log file classes.

3
仍然显示“100%”消息。 - Scott Chu
14
这仍然会打印出一个空行,在批处理文件中很明显。 - wqw
11
当指定了/nfl /ndl时,不需要使用/nc /ns - Vojtěch Dohnal
5
@wqw,在行末添加"> NUL",空行就不会出现了。 - user1889116
2
@ScottChu 当你使用/mt开关时,这将打印100%。我猜你必须决定是否要多线程,或者不显示%s。 - Loaf
显示剩余4条评论

47

3
NFL抑制文件名。 - xagyg
18
如果您使用/mir/purge,额外的文件仍然会被记录。找不到关闭它的方法。 - bbodenmiller
1
请注意,使用Robocopy时,进度条仅显示每个文件的百分比,不会显示已复制的总字节数/总百分比的进度。 - barlop
非常有趣的@bbodenmiller赞赏...记录这些文件非常烦人... - toscanelli

33
如果您不希望有任何输出,那么这是最简单的方法: robocopy src dest > nul 如果您仍然需要一些信息但只想剥离输出的部分,请使用R.Koene答案中的参数。

7
我在Win8.1 x64下测试了> log:nul,结果得到一个空的日志文件。而> nul则按预期工作。 - Ivan Yan
3
这个命令生成的“空”log文件实际上并不是真正的空。它只是将数据保存到一个备用流中,这个流对于资源管理器而言是不可见的,但在磁盘上确实存在。(你可以使用 dir /r 命令来查看它。)@IvanYan 是正确的,> nul 是丢弃输出内容的正确命令。 - jmbpiano

22

在PowerShell中,我喜欢使用:

robocopy src dest | Out-Null

它避免了需要记住所有命令行开关。


在进行此操作时,它立即无警告地终止了命令。我正在使用 /PURGE - Kevin Ghadyani
2
Out-Null对robocopy命令的执行没有影响,它只是重定向输出流。https://msdn.microsoft.com/en-us/powershell/reference/4.0/microsoft.powershell.core/out-null 如果你删除Out-Null,或许可以通过被丢弃的输出信息找到问题的线索。 - Aaron Tribou

4

Robocopy有时会打印空行,即使它什么也没有做。我使用如下命令过滤掉空行:

robocopy /NDL /NJH /NJS /NP /NS /NC %fromDir% %toDir% %filenames% | findstr /r /v "^$"

1

如果您希望完全无声,可通过将输出重定向到文件(并可选择稍后删除该文件)来实现。

Robocopy src dest > output.log
del output.log

8
also > NUL 只是将输出丢弃,不用担心文件问题。 - Sellorio
3
在PowerShell中,将输出流(Output Stream)传输至Out-Null,可以使命令不产生任何输出。 - orad

0

我不确定是否正确,但我在Gitlab中使用它并且它有效:

robocopy <src> <dst> *.dll *.exe *.bat /E; $LastExitCode

-1

> null无法在引号中使用。它将> null视为批处理文件名。

robocopy没有输出!!!

以下是新的批处理文件:

robocopy /mir /B /r:1 /nfl /ndl /njh /njs /nc /ns /np c:\EnvBackup c:\offsite_backup\EnvBackup

robocopy /mir /B /r:1 /nfl /ndl /njh /njs /nc /ns /np c:\shares c:\offsite_backup\shares

robocopy /mir /B /r:1 /nfl /ndl /njh /njs /nc /ns /np c:\Quickbooks_Backup c:\offsite_backup\Quickbooks_Backup

null不起作用,因为它应该是nul - undefined

-4

没有必要先重定向到一个文件,然后再删除它。 尝试一下:

Robocopy src dest > null 

3
这将创建一个名为“null”的文件,并将日志写入其中。这会在命令行中使其静音,但会增加储存驱动器的写入次数。 - Kevin Ghadyani
3
我认为OP的意思是打算输入nul(而不是null),在Windows上这是一个类似于Linux上的/dev/null的特殊保留文件名。但是,这并没有回答OP的问题。 - Cameron Tacklind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接