使用 robocopy 并排除多个目录

使用 robocopy 并排除多个目录

我试图在从备份中恢复之前从服务器复制一些目录(我的最新备份已损坏,因此我必须使用较旧的备份:()。我在Windows恢复环境中,可以访问服务器的文件系统G:\和我的备份媒体C:\。但是,由于我更熟悉Linux,所以我对Windows中的命令行遇到了一些麻烦,具体来说robocopy

我想将多个目录(保持相同的目录结构)从 G:\ 复制到 C:\,同时排除其他目录(即 Windows 和 Program Files 文件夹)。我搞不清楚该/XD选项的语法。我希望做类似的事情:

robocopy G: C:\backup /CREATE /XD "dir1","dir2", ...

笔记:我想澄清一下,我想复制实际文件,同时保留目录结构。我刚刚检查过,/create只创建了空文件。很奇怪。

答案1

我通过反复试验和/L(在实际执行之前测试命令)找到了答案。我最终得到的命令是:

robocopy G: C:\backup /MIR /XD G:\dir1 "G:\dir 2" G:\dir3 ...

显然,包含尾随斜杠会导致 robocopy 无法正确解析目录列表,因此请确保不要在目录名称中包含尾随斜杠,并记得在名称中带有空格的目录周围加上引号。

/MIR选项在复制文件时保持相同的目录结构。

编辑:经过进一步研究后,我稍微改进了命令:

robocopy G: C:\backup /MIR /Z /LOG:C:\todaysdate-backup.log /XF *.iso *.log *.au /XD G:\dir1 ...

新增内容如下:

  • /Z允许重新启动作业
  • /LOG:<logfile path>是不言自明的。
  • /XF用于排除某些文件类型,这样就不会花太长时间

答案2

你必须重复这一/XD部分

C:\>robocopy "C:\Users\weberjn\Google Drive" "u:\Google Drive" /e /dcopy:t /copy:DT /r:0 /XD "C:\Users\weberjn\Google Drive\photos" /XD "C:\Users\weberjn\Google Drive\Google Photos"

答案3

我知道这并没有回答 OP 的问题,但是对于来自谷歌的任何人来说:如果使用引号,XD 将在作业文件中失败。

坏的:

::
:: Exclude These Directories :
::
    /XD     :: eXclude Directories matching these names
        "Temporary Internet Files"

好的:

::
:: Exclude These Directories :
::
    /XD     :: eXclude Directories matching these names
        Temporary Internet Files

逐行放置任意数量的排除项,无需使用引号(无论是否有空格)。

我发现这一点的方法是使用命令行开关 /SAVE:myjobname,它将引号从我引用的目录中删除!

答案4

这是根据Fara Importanta 在 ServerFault 上的回答Robocopy 终极指南

由此可知Charlie C 的回答使用文件来存储排除项/包含项。然而,我们却利用了开关/JOB

让我们以存储在以下文件中的排除列表为例

排除.rcj

/XF
    *.pyc
    *.pyo
    *.pyd

/XD
    __pycache__
    .pytest_cache

请注意,我们如何能够在文件内部拥有多个开关,并使用新行分隔名称以提高可读性!

我们的批处理脚本可以类似如下内容:

备份程序

SET _backupDir=backup_path\
SET _excl="%_backupDir%exclude.rcj"

robocopy src_path dest_path /JOB:%_excl%

相关内容