[玩转系统] Robocopy 终极指南
作者:精品下载站 日期:2024-12-14 12:54:54 浏览:13 分类:玩电脑
Robocopy 终极指南
Robocopy 是最常用的命令行实用程序之一,用于在 Windows 中复制大量数据。它之所以如此受欢迎,是因为它的功能非常强大。但伴随着所有这些力量,复杂性也随之而来。在本指南中,我们将分解所有这些复杂性,并提供有关使用这个有用工具的完整教程。
Robocopy 是一个 Windows 命令行实用程序,自 Windows NT 以来就可用。它是通用性较差的 xcopy 实用程序的替代品。它允许您在命令提示符下指定驱动器路径或服务器路径来复制/移动文件。
截至撰写本文时,Robocopy 的版本最高为 10.0.18。这是我进行测试的版本。
Robocopy 提供了大量功能,您可以利用它们来执行高效、快速的文件复制和移动。它可以:
- 通过网络复制文件并具有恢复功能
- 可以跳过通常因无限循环而导致失败的 NTFS 连接点
- 可以复制保留时间戳的文件和目录属性
- 可以复制 NTFS 权限、所有者和审核信息
- 可以复制目录时间戳
- 可以在“备份”模式下复制文件,以确保即使管理员的权限被拒绝也能复制文件
- 自动重试
- 可以同步两个文件夹
- 足够聪明,可以跳过已复制的文件
- 可以复制大于 256 个字符路径限制的路径
- 使用其多线程功能执行异步复制。
- 返回在脚本中使用的标准化退出代码
正如您所看到的,有很多需要复制。我想介绍您需要了解的有关这个方便工具的所有信息。
常见 Robocopy 语法参考
为什么要在一个实用程序上写这么长的博客文章?请看看下面的表格,让您大饱眼福。您有很多选项来使用 robocopy 复制或移动文件!您将在各个部分中获得更多选项。
这些表是根据从 robocopy /?
返回的帮助语法构建的。它们已被分解为更有意义的部分,随着时间的推移不断添加,并进行清理以提供更多有用的信息。
来源选项
SwitchExplanationDefault BehaviorEquivalent SwitchNotes/SCopy subfolders/ECopy subfolders including empty subfolders/COPY:[DATSOU]Copy options/COPY:DATD=Data, A=Attributes, T=Timestamps S=Security=NTFS ACLs, O=Owner info, U=aUditing info. File Data (D) always includes file Timestamps (T)/SECCopy files with SECurity/COPY:DATS/DCOPY:TCopy directory timestamps/COPYALLCopy ALL file info/COPY:DATSOUThis will prevent dehydrating offline files and will instead copy the file’s tag (on emc VNX/Unity systems at least). This is not officially documented! If dehydration is what you need (reason i found this issue), you can’t copy the ACLs along your files. CREDIT: Monsieurx (Reddit)/NOCOPYCopy NO file infouseful with /PURGE/ACopy only files with the Archive attribute set/Mlike /A, but remove Archive attribute from source files/LEV:nOnly copy the top n LEVels of the source tree/MAXAGE:nMAXimum file AGE – exclude files older than n days/date/MINAGE:nMINimum file AGE – exclude files newer than n days/dateIf n < 1900 then n = no of days, else n = YYYYMMDD date/FFTAssume FAT File Times2-second date/time granularity. This replaces NTFS timestamps. Seems to be more reliable when transferring over a network./256Turn off very long path (> 256 characters) support目的地选项
SwitchExplanationDefault BehaviorEquivalent SwitchNotes/A+:[RASHCNET]Set file attribute(s) on destination files + add/A-:[RASHCNET]Remove file attribute(s) on destination files/FATCreate destination files using 8.3 FAT file names only/CREATECreate directory tree structure + zero-length files only/DSTCompensate for one-hour DST time differences复制选项
SwitchExplanationDefault BehaviorEquivalent SwitchNotes/LList files onlyDon’t copy, timestamp or delete any files/MOVMove filesDelete from source after copying/MOVEMove files and directoriesDelete from source after copying/slCopy file symbolic links instead of the target/ZCopy files in restartable modeSurvive a network glitch/BCopy files in backup mode/JCopy using unbuffered I/ORecommended for large files/NOOFFLOADCopy files without using the Windows copy offload mechanismhttps://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831628(v=ws.11)/EFSRAWCopy any encrypted files using EFS RAW mode/TIMFIXFix file times on all files, even skipped files/XOExclude olderif destination file exists and is the same date or newer than the source – don’t bother to overwrite it./XCExclude changed files/XNExclude newer files/XXExclude files present in destination but not source/XX/XF file [file]…Exclude files matching given names/paths/wildcards/XD dirs [dirs]…Exclude directories matching given names/paths./XF and /XD can be used in combination e.g. ROBOCOPY c:\source d:\dest /XF *.doc *.xls /XD c:\unwanted /S/IA:[RASHCNETO]Include files with any of the given attributes/XA:[RASHCNETO]Exclude files with any of the given attributes/IMOverwrite modified files. This includes the same files with different times./ISOverwrite files even if they are already the same/ITInclude tweaked files/XJExclude junction points from source/XJ/XJDExclude junction points from source directories/XJFExclude junction points from source files/MAX:nExclude files bigger than n bytes/MIN:nExclude files smaller than n bytes/MAXLAD:nExclude files unused since n/MINLAD:nExclude files used since nIf n < 1900 then n = n days, else n = YYYYMMDD date/MIRMirror a directory tree/PURGE /E/PURGEDelete dest files/folders that no longer exist in source/XLExclude files present in source but not destination/SECFIXRobocopy /secfix fixes file security on all files, even skipped files.Specify the type of security information you want to copy by also using one of these options: /COPYALL /COPY:O /COPY:S /COPY:U /SEC/ZBUse restartable mode; if access denied use Backup mode监控选项
SwitchExplanationDefault BehaviorEquivalent SwitchNotes/R:nNumber of retries on failed copies/R:1000000Always try to set this option. I recommend setting this to 10-20 to not waste time retrying./W:nWait time between retries/W:30Always try to set this option to a lower number to retry more quickly. I suggest 5-10./REGSave /R:n and /W:n in the Windows registry as default settings/RH:hhmm-hhmmtimes when new copies can be started/TBDWait for sharenames to be definedretry error 67/PFCheck run hours on a per file (not per pass) basis/MON:nRun again when more than n changes seen/MOT:mRun again in m minutes, if changed了解 Robocopy 行为
现在,我已经用所有可用的潜在语法选项让您大吃一惊。现在让我们看看如何使用此语法的所有不同组合。
我可以为您提供一个非常长的 robocopy 命令列表,其中的开关数量不断增加。但我认为最好教你如何钓鱼。让我们来看看如何理解所有这些选项。
Robocopy 仅复制整个目录
每个 robocopy 执行都会有一个源目录和一个目标目录。 Robocopy 按整个目录复制和移动文件。使用 robocopy 无法显式复制单个文件。为此,请使用 copy
或 PowerShell 的 Copy-Item
。
但是,您可以通过正确的过滤来自动复制单个文件,您将在下面了解这一点。要 robocopy 单个文件文件,请指定源目录和目标目录,后跟源中的文件名。
> robocopy c:\src d:\dst copythisfile.txt
语法取决于环境
此外,您提供给 robocopy 的选项将取决于环境。在尝试确定要使用哪些选项时,您需要回答几个问题。
- 您总是会复制到空目录吗?
- 文件是否可能已存在于目标目录中?
- 您会复制数 TB 的数据还是仅复制几兆字节的数据?
- 您会通过网络还是本地复制文件?
- …和更多。
如果目标文件目录中没有文件,则不必关心覆盖文件的选项。如果您不会通过网络复制文件,则不必担心这些选项。明确定义您的环境当前和未来潜在的情况。
认识默认选项
Robocopy 默认使用很多选项。您可以通过查看上面的表格来挑选它们。它还在您每次运行该实用程序时提供方便的输出。
您可以在下面看到,当我使用最基本的选项(源文件夹和目标文件夹)运行 robocopy 时,它会自动使用一些选项。了解默认行为很重要。
参考您在输出中看到的选项以及上面的选项说明,您将准确了解 robocopy 在幕后所做的事情。
了解 Robocopy 命令的功能
如果您使用过 copy
或 PowerShell 的 Copy-Item
cmdlet,您可能已经指定了源和目标并继续您的一天。您可以在那里配置的选项并不多。这些 robocopy 命令具有默认行为。
但另一方面,robocopy 的理解能力要强得多,并且可以让您根据需要灵活地调整行为。
重要的是要知道 robocopy 不仅仅了解文件或目录的概念。文件系统的功能远不止于此,robocopy 几乎支持所有功能。
文件系统上的文件不仅仅是具有单一用途的愚蠢对象。有许多不同的属性和事物与文件的概念相关。例如,一个文件具有以下属性:
- 时间戳(写入、修改和访问)
- NTFS访问控制列表
- 业主
- NTFS审核信息
- 隐藏标志
- 存档标志
当您复制或移动文件时,如果需要,您可以选择将所有这些内容一起带上。
请注意,当您运行 robocopy 时,您不仅仅是复制文件,还可能会复制所有其他信息。认识到这一点并在您提供的 robocopy 选项中考虑到这一点很重要。
基础知识:执行 WhatIf 场景
如果您想要迁移的地方有一个巨大的文件服务器,但还不想采取任何操作,您可以使用 robocopy 返回它本来会执行的操作。
使用 /L
选项,您可以告诉 robocopy 枚举您指定的所有文件和/或文件夹,并返回它将复制/移动的文件列表。
您可以将 /L
选项与任何其他选项一起使用。这是返回 robocopy 将使用的所有选项(默认或非默认)的好方法。它将让您全面了解 robocopy 根据您提供的选项将执行的操作。
基础知识:复制文件
robocopy 最基本的用法是使用不带任何选项的源目录和目标目录。
> robocopy C:\src C:\dst
此选项会将所有文件(不包括子文件夹)从C:\src复制到C:\dst。
您还可以复制所有内容,包括子文件夹(无论是否为空)和 NTFS 权限。据我所知,这是将一个文件目录中的所有内容逐字复制到另一个目录的方法。
下面我将复制所有 NTFS ACL、文件所有者、子文件夹(包括空文件夹)和所有文件属性。所有这一切都可以通过 /E
选项来包含所有空子文件夹和 /COPYALL
来捕获其余内容。
> robocopy C:\src C:\dst /E /COPYALL
基础知识:移动文件
移动文件将文件从一个目录传输到另一个目录,就像复制一样。与移动操作的唯一区别是源文件在复制后被删除。
要在复制后从源中删除文件/目录,请使用 /MOV
选项。这将删除指定目录中的所有文件(无子文件夹)。
> robocopy C:\src C:\dst /MOV
您还可以使用 /MOVE
移动所有文件和子文件夹。
> robocopy C:\src C:\dst /MOVE
基础知识:同步文件
Robocopy 允许您同步两个目录。这意味着要么确保目标目录中的所有文件都位于源目录中,而不是更多。 /MIR
将复制数据,复制源中而非目标中的所有文件,并删除目标中而非源中的文件。谨防!
> robocopy C:\src C:\dst /MIR
通过网络复制文件
如果您通过网络复制文件,则应该考虑一些选项。
Robocopy 允许您使用 /Z
选项以“可重新启动模式”复制文件。这意味着,如果文件开始复制并中途失败,复制可以重新开始,而不是完全失败。当流通过网络被切断时,/Z
选项非常有用。
警告:有些人报告使用 /Z
会使性能降低 1/4。让我知道您的发现。
您还可以使用/FFT
选项。众所周知,此开关可以在通过网络传输时更准确地保留文件时间戳。此选项使用 FAT 文件系统时间戳而不是 NTFS。
robocopy C:\src \SRV1\share /Z /FFT
使用/IPG
控制包间间隙
通过网络复制文件时,可以使用 /IPG
开关。这也称为数据包间间隙选项。此选项定义(以毫秒为单位)robocopy 在发送新数据包之间等待的频率。
始终使用 UNC 路径而不是驱动器号
Reddit 上的一位读者发现了不使用映射驱动器作为目标目录的困难方法。相反,始终使用 UNC 路径。如果这样做,您可能会遇到 256 个字符限制的问题。查看此 Microsoft 文档以获取更多信息。
Robocopy 备份模式 (Robocopy /Z
)
Robocopy 有一个选项 (/B
) 或作为可重新启动模式的备份 (/ZB
),在备份模式下复制文件。到底什么是“备份模式”?
当您通常在 Windows 中复制文件并点击需要管理权限才能访问的文件时,您会收到一条错误消息,指示您没有权限。即使您可能以本地管理员身份运行,Windows 也不会允许您访问它。
警告:有报告称,在启用重复数据删除的情况下将数据复制到 Windows Server 2016 服务器时,服务器卷会损坏。当您使用 /ZB
开关时,结果将是重复数据删除块存储在系统卷信息中被丢弃。复制的文件将不可读,并且在尝试操作它们时会生成错误。包含更多信息的 Serverfault 链接。
备份模式是一种无需担心权限即可访问文件的方式。
Robocopy 使用备份模式使用 SeBackupPrivilege 读取文件,并使用 SeRestorePrivilege 用户权限访问所需的任何文件。这会忽略通常会阻止您访问这些文件的任何 ACE。
SeBackupPrivilege和SeRestorePrivilege用户权限通常分配给Backup Operators和Administrators组中的用户,但有时他们可以被删除。备份模块消除了这种风险,并暂时授予执行 robocopy 的用户这些权限。
如果您想检查您的用户帐户是否具有该权限,您可以运行 whoami /priv
,这两种权限都会显示。
过滤文件和文件夹
您可以使用的绝大多数选项都是通过多种不同的方式排除文件和目录。我已经分解了根据各种条件过滤或排除文件和目录的所有方法。
按文件名或文件扩展名
使用通配符过滤在 robocopy 调用中复制/移动的文件。您可以使用通配符来过滤与特定文件名字符串或扩展名匹配的文件。
例如,要仅复制 TXT 文件,您可以指定 *.txt。
> robocopy C:\src C:\dst *.txt
如果您想限制仅以 a 开头的文件,您可以使用 a*。
> robocopy C:\src C:\dst a*
Y0u 还可以通过用空格分隔来提供多组文件名匹配,如下所示。
> robocopy C:\src C:\dst a* b*
当您按文件名过滤时,robocopy 将在输出中向您显示过滤器。
按目录名称
Robocopy 不仅允许您按文件过滤项目,还可以按目录名称过滤项目。使用robocopy /xd,您可以排除与特定名称匹配的某些目录。
复制多个文件夹时,请使用 /XD
开关从运行中排除文件夹。
> robocopy C:\src C:\dst /XD "c:\src\exclude"
按文件/目录时间戳
您将在下面找到所有 robocopy 选项,这些选项将根据各种时间戳属性排除文件和文件夹。
Switch解释
/DCOPY:T复制目录时间戳
/MAXAGE:n排除早于 n 天/日期的文件
/MINAGE:n排除晚于 n 天/日期的文件
/XO如果目标文件存在并且与源文件日期相同或更新,则不要覆盖
/XN如果目标文件存在并且日期与源文件相同或更早,则不要覆盖
在过滤时间戳等内容时,有两种流行的选项可供选择; /XO
和 /MAXAGE
。
/XO
允许您仅在文件比源更新时从副本中排除文件。使用 /XO
选项,您可以按访问日期仅自动复制新文件。
> robocopy C:\src C:\dsc /XO
如果您知道文件的最大年龄,您还可以使用 /MAXAGE
选项。这允许您以 YYYMMDD 格式指定文件在复制之前可以拥有的较旧日期。
> robocopy c:\src c:\dst /S /MAXAGE:20191001
Robocopy 职位
您已经看到有数十种可供您选择的选项。这些选项很快就会变得难以使用。值得庆幸的是,你有一个比死记硬背更好的选择,并确保所有这些选项每次都准确无误。
Robocopy 作业文件是每行包含一个选项的文本文件。您通常会使用 robocopy 来创建这些作业文件。创建后,您可以使用 robocopy 或简单的文本编辑器来修改它们。
您有各种与作业一起使用的 robocopy 命令。
SwitchExplanationDefault BehaviorEquivalent SwitchNotes/JOB:jobnameTake parameters from the named job file/SAVE:jobnameSave parameters to the named job file/QUITQuit after processing command lineUseful for viewing parameters/NOSDNo source directory is specified/NODDNo destination directory is specified/IFInclude the following files使用 robocopy 创建的典型作业文件具有 RCJ 扩展名,如下所示。该作业文件是通过运行 robocopy C:\src D:\dst /save:myjob 创建的。您可以看到,您可以使用 ::
在作业文件中提供注释,这是该文件的大部分内容。
如果没有注释,该文件每行仅包含一个选项。
::
:: Robocopy Job C:\MYJOB.RCJ
::
:: Created by Administrator on Sunday, August 18, XXXX at 8:53:24 AM
::
::
:: Source Directory :
::
/SD:C:\SRC\ :: Source Directory.
::
:: Destination Directory :
::
/DD:C:\SRC\ :: Destination Directory.
::
:: Include These Files :
::
/IF :: Include Files matching these names
:: *.* :: Include all names (currently - Command Line may override)
::
:: Exclude These Directories :
::
/XD :: eXclude Directories matching these names
:: :: eXclude no names (currently - Command Line may override)
::
:: Exclude These Files :
::
/XF :: eXclude Files matching these names
:: :: eXclude no names (currently - Command Line may override)
::
:: Copy options :
::
/DCOPY:DA :: what to COPY for directories (default is /DCOPY:DA).
/COPY:DAT :: what to COPY for files (default is /COPY:DAT).
::
:: Retry Options :
::
/R:1000000 :: number of Retries on failed copies: default 1 million.
/W:30 :: Wait time between retries: default is 30 seconds.
::
:: Logging Options :
::
保存作业文件
保存作业文件就像将 /SAVE:
选项附加到语法末尾一样简单。将 <jobname>
替换为作业名称。 /SAVE
选项将在运行 robocopy 的目录中创建一个名为 .rcj 的文件。
> robocopy C:\src C:\dst /SAVE:myjob
您必须指定/SAVE
作为最后一个选项。 /SAVE
之后指定的任何选项都不会添加到作业文件中。另请注意,即使现有作业文件已存在,robocopy 也将始终覆盖现有作业文件。备份或版本控制您的作业文件!
注意:如果您在保存到作业文件时尝试使用 /MT
选项,则该选项将不会出现在作业文件中。如果您能够将其包含在内,请告诉我。
使用作业文件
将作业保存到作业文件后,您可以使用 /JOB:
选项指定要读取的作业文件。 Robocopy 读取作业文件内的所有参数。然后它就会执行,就像您直接在命令行上提供选项一样。
> robocopy /JOB:myjob
使用 /QUIT
创建作业文件而不运行作业
/QUIT
选项的目的并不明显。从表面上看,您可能认为 /QUIT
强制退出运行。相反,/QUIT
的作用更像是一个从一开始就阻止作业运行的选项。
正式地,/QUIT
选项“强制 robocopy 终止处理命令行”。但是,最好将其解释为创建作业文件而不运行作业。
如果您使用/SAVE
选项,它也会自动运行该作业。如果不先运行作业,就无法创建作业文件。您可以使用文本编辑器创建 RCJ 作业文件,也可以使用 robocopy 通过在末尾附加 /QUIT
来完成此操作。
> robocopy C:\src C:\dst /SAVE:myjob /QUIT
编辑作业文件
由于作业文件只是文本文件,因此您可以使用您喜欢的文本编辑器编辑它们,也可以让 robocopy 为您完成此操作。
您可以使用 /JOB
、/SAVE
和 /QUIT
组合来编辑作业文件。
例如,您可能希望从保存在名为 backupfiles.rcj 的作业文件中的 robocopy 作业中排除所有 EXE 文件。您已经创建了作业文件,并且不想覆盖整个文件。您可以添加新选项,如下所示:
> robocopy /JOB:backupfiles /XF *.EXE /SAVE:backupfiles /QUIT
使用多个作业文件
您甚至还可以结合使用作业文件。在同一运行中指定多个作业文件时,该运行中使用的所有选项将组合在一起。
例如,您可能有大量文件需要从备份文件复制作业中排除。打开文本编辑器,然后添加以下内容以创建一个 exclude.rcj 文件。
/XF
a.exe
b.txt
c.cer
然后,您可以从 backupfiles 作业中排除这些文件,如下所示:
> robocopy /JOB:backupfiles /JOB:exclude
由于原始的 backupfiles 作业文件已经排除了所有 EXE 文件,因此上面的运行语法将如下所示:/XF *.exe a.exe b.txt c.cer
。 Robocopy 将所有选项合而为一。
Robocopy 模板和使用 /NOSD
和 /NODD
选项
如果您正在使用大量作业文件,则可以构建作业文件以接受参数。 Robocopy 允许您在作业运行时将值从命令行传递给作业。 参数不是一个 robocopy 术语,但它非常适合这种情况。
您可以构建 robocopy 作业来接受参数,方法是不指定源目录或目标目录,或者显式使用 /NOSD
和 /NODD
选项,或者只是不包含源目录和目标目录全部。
举一个简单的示例,使用以下语法创建一个没有源或目标的作业文件。此作业的目的是将所有 TXT 和 EXE 文件从源目录复制到目标目录。
> robocopy *.txt *.exe /SAVE:backupfiles /QUIT
就其本身而言,该作业永远不会工作,因为没有指定源或目标目录。
当您创建没有源目录和目标目录的作业时,将使用 /NOSD
和 /NODD
选项自动创建作业文件。
/NOSD
/NODD
/IF
*.txt
*.exe
/DCOPY:DA
/COPY:DAT
/R:1000000
/W:30
/NOSD
选项告诉 robocopy 您没有包含源目录,而 /NODD
则表明您没有包含目标目录。该作业文件是其他作业的“模板”。
但是您可以将“参数”传递给此作业文件以提供源目录和目标目录。
要使用刚刚创建的作业文件将文件从 C:\src 复制到 C:\dst,您可以直接在命令行上传递这些目录,然后将传递给工作。
> robocopy /JOB:backupfiles C:\src C:\dst
异步复制(Robocopy /MT
)
默认情况下,robocopy 一次仅处理一个文件。但是,您可以使用 /MT
选项强制 robocopy 一次复制更多文件。
/MT
选项允许您指定 robocopy 将用于复制文件的线程数。最大值为 128。
您可以像这样使用 /MT
:
> robocopy C:\src C:\dst /MT:32
在本例中我选择 32 作为基准。我建议从 32 开始,看看您的计算机和网络如何处理事物并相应地调整线程。
请注意,如果您确实使用 /MT
,您将无法使用 /IPG
或 /EFSRAW
。为了获得更好的性能,不要将日志输出到控制台。相反,请使用 /LOG
。
调度机器人复制
Robocopy 有几种方法可以安排其运行时间。
使用/RH
使用 /RH
选项,您可以告诉 robocopy 仅在特定时间运行。如果您有维护窗口或每个人都回家的时间,这非常有用。
您可以以 HHMM-HHMM 格式指定开始时间和结束时间。例如,要调用 robocopy 但仅允许其在系统时钟定义的下午 5 点到上午 9 点之间运行,请运行:
> robocopy C:\src C:\dst /RH:1700-0900
您会发现,如果您在这些时间之外调用 robocopy,它会告诉您当前时间并等待开始时间运行。
您必须确保两个时间均采用 24 小时格式,并且长度恰好为四位数字。该窗口必须大于两分钟。
默认情况下,使用 /RH
将在整个运行之前检查开始时间。但是,如果您有很多文件并且认为该过程可能会比这更长,您可以使用 /PF
选项。 /PF
将强制 robocopy 检查每个文件之前的窗口。
使用任务计划程序
输出日志
Robocopy 将始终返回输出日志。该日志是否通过控制台上的 stdout 显示和/或重定向到日志文件取决于您。
显示 robocopy 输出时,您有很多选项。
SwitchExplanationDefault BehaviorEquivalent SwitchNotes/NPNo progress. Suppresses the display of progress information. This can be useful when output is redirected to a file./unicodeDisplay the status output as unicode text/LOG:fileOutput status to log file and overwrite/UNILOG:fileOutput status to unicode log file and overwrite/LOG+:fileOutput status to log file and append to existing log file/UNILOG+:fileOutput status to unicode log file and append to existing log file/TSDisplays the file timestamps for every file processed./FPReplaces simple file names with full file pathnames in the output./NSDoes not show file sizes./NCHides output the file class “Text Tags” (Go here for more information: https://www.uvm.edu/~gcd/2015/04/robocopy-file-classes/)/NFLHides file names. Failures are still logged though. Any files files deleted or would be deleted if /L was omitted are always logged/NDLHides output of the directory listing. Full file pathnames are output to more easily track down problematic files./TEEOutput to console window, as well as the log file/NJHNo job header/NJSNo job summary/BYTESPrint sizes as bytes/XReport all files, not just those selected & copied/VProduce verbose output log, showing skipped files/ETAShow estimated time of arrival of copied files. See the start time of each file copy and the estimated time of completion based on the observed throughput of previous copies. Times are displayed after the file name in the format HH:MM - > HH:MM (start - > finish)./DEBUGShow debug volume information使用 /NJS
和 /NJH
限制日志元素
默认情况下,robocopy 在其输出中返回两个元素:作业标题和作业摘要。
作业标头是顶部的简单 ROBOCOPY 标头。
作业摘要显示所有文件/文件夹的摘要状态、传输的数据量以及运行结束的时间。
您可以使用 /NJH
选项隐藏作业标题,使用 /NJS
选项隐藏作业摘要来隐藏每个元素。您可以包含其中一个选项或同时包含这两个选项。
将输出日志重定向到文件
如果需要保存输出日志,可以将其重定向到文本文件和/或将其显示在控制台上。您可以使用传统的输出重定向器(例如 >
、>>
、PowerShell 或 /LOG
选项)来执行此操作。
要使用 /LOG
选项将输出日志重定向到文件并覆盖任何现有日志文件,请使用语法 /LOG:
,如下所示。您在控制台上收到的唯一输出是日志文件的路径。
> robocopy C:\src C:\dst /LOG:c:\file.log
Log File : c:\file.log
如果您想保留任何现有日志文件的内容并将结果附加到文件中,可以使用 +
运算符,如下所示。
> robocopy C:\src C:\dst /LOG+:c:\file.log
Log File : c:\file.log
将输出日志重定向到文件并显示在控制台上
如果您想将输出日志保存到文件中,同时又想在控制台上查看它,则可以使用 /TEE
选项。此选项使 robocopy 将输出写入日志文件,同时仍保持将输出返回到控制台的默认行为。
robocopy C:\src C:\dst /LOG+:c:\file.log /TEE
退出代码
与所有其他命令行实用程序一样,robocopy 根据执行结果返回退出代码。我们都希望 robocopy 总是以 0
成功退出,但这并不总是发生。
您将在下面找到 robocopy 返回的所有退出代码及其解释。任何大于 7 的退出代码都表示执行期间至少有一次失败。
Exit Code解释
0未执行任何操作。源和目标是同步的。
1至少有一个文件已成功复制。
2检测到额外的文件或目录。检查日志。
3退出代码 2 和 1 组合。
4发现不匹配的文件或目录。检查日志。
5退出代码 4 和 1 组合。
6退出代码 4 和 2 组合。
7退出代码 4、1 和 2 组合。
8至少有一个文件或目录无法复制。超出重试限制。检查日志。
16复制灾难性地失败了。
请注意,如果您在第三方实用程序中执行 robocopy,该实用程序可能会认为任何非零退出代码都是失败。为了防止这种情况,如果返回 1,您可以将退出代码更改为 0。
Robocopy“额外”文件退出代码是常见的返回代码,意味着“额外”文件位于目标文件夹中,但不在源文件夹中。此代码排除了会阻止从目标位置进行任何删除的额外内容。
更改批处理文件中的退出代码
如果您使用批处理文件执行 robocopy,则可以找到 %ERRORLEVEL%
变量的值。如果返回 1,则使用 exit
关键字以 0 退出脚本。
> (robocopy <options>) ^& IF %ERRORLEVEL% LEQ 1 exit 0
更改 PowerShell 脚本中的退出代码
如果您在 PowerShell 脚本中执行 robocopy,则可以通过 Start-Process
调用 robocopy,使用 PassThru
返回创建的进程并 Wait
等待 robocopy 完成。然后,您可以检查 ExitCode
属性的值是否为 1。如果退出代码为 1,则使用 $host.SetShouldExit()
以 0 退出 PowerShell 脚本。
$exitCode = (Start-Process -FilePath 'robocopy' -ArgumentList '<option>' -PassThru -Wait).ExitCode
if ($exitCode -eq 1) {
$host.SetShouldExit(0)
}
常见错误
如果您正在处理数千个文件,那么您必然会遇到一些问题。以下是我遇到的常见错误的细分
错误参数无效
当您看到错误指出错误无效参数时,这通常意味着您尝试以某种方式不按顺序将选项传递给 robocopy。看来,robocopy invalid parameter 3 错误是最常见的。
收到此错误的一个常见原因是当您指定带有空格的源目录或目标目录时忘记用引号将其引起来。
Robocopy 示例
您可以构建自己的 robocopy 字符串,也可以采用其他人学到的知识并使用它们!在本节中,我将介绍如何使用 robocopy 完成各种事情的用例。
查找网络文件夹的目录大小
贡献者:northendtroooper (Reddit)
> robocopy "\MACHINE\fileshare" c:\dummy /l /xj /e /nfl /ndl /njh /r:0 /mt:64
快速删除文件夹内容(忽略子文件夹的权限)
贡献者:pizzasteveo (Reddit)
> robocopy c:\dummy c:\foldertodelete /MIR
执行大文件迁移
贡献者:@MySnozzberry(推特)
此代码片段的目标是将所有文件的所有权强制返回给管理员。然后,我们为管理员组添加显式 ACE,以便递归地完全控制每个对象,即使我们也设置继承。
最后,我们使用 DACL 将完整的 robocopy 复制到带有日志的目的地。然后可以检查日志是否存在其他权限问题或仅检查文件锁定,并可以稍后执行另一个增量同步。
> takeown /F .\test /R /A /D Y
> icacls .\test /grant "Administrators":(OI)(CI)F /T
> robocopy .\test .\test2 /E /SEC /FP /V /LOG:.\temp.log
递归地强制管理员组作为所有文件和目录的所有者。有很多方法可以解决这个问题,但这是最严厉的方法,通常也是最快的方法。
> takeown /F .\test /R /A /D Y
一旦我们成为所有者,我们现在就可以为每个对象强制将新的 ACE 放入 DACL 中。这授予管理员完全控制权,并启用继承并通过路径递归。
通过继承在根目录中设置此选项将覆盖环境,但是当共享的CREATOR OWNER具有完全控制时(遗憾的是,这甚至是 Microsoft 对于文件用户配置文件存储等内容的建议) ),用户可以自行决定禁用继承或删除 ACE。因此,重拳通常是最快的解决办法。
> icacls .\test /grant "Administrators":(OI)(CI)F /T
一旦我们更改了大多数文件的 DACL,我们就会尝试将文件复制到新位置,这对于文件共享迁移等操作很常见。为此,我们递归地复制项目并使用 /SEC
开关来复制数据/属性/时间戳/DACL。
然后,我们将使用完整路径和所有对象(/V
详细开关)的操作记录到日志中,这样我们就可以修复
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag