使用 robocopy 并排除多个目录

Gor*_*McD 71 windows-server-2008-r2 robocopy

在从备份恢复之前,我试图从服务器复制一些目录(我的最新备份已损坏,所以我必须使用旧的 :( )。我在 Windows 恢复环境中并且可以访问服务器的文件systemG:\和我的备份媒体C:\。但是,由于我更熟悉 Linux,我在 Windows 中的命令行方面遇到了一些麻烦,特别是robocopy.

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

robocopy G: C:\backup /CREATE /XD "dir1","dir2", ...
Run Code Online (Sandbox Code Playgroud)

注意:我想澄清一下,我想在保持目录结构的同时复制实际文件。我刚刚检查过,/create只创建空文件。奇怪的。

Gor*_*McD 115

我通过一些反复试验和/L(在真正执行命令之前测试命令)弄清楚了。我最终得到的命令是:

robocopy G: C:\backup /MIR /XD G:\dir1 "G:\dir 2" G:\dir3 ...
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:经过更多研究,我稍微改进了命令:

robocopy G: C:\backup /MIR /Z /LOG:C:\todaysdate-backup.log /XF *.iso *.log *.au /XD G:\dir1 ...
Run Code Online (Sandbox Code Playgroud)

新增内容如下:

  • /Z 允许重新启动作业
  • /LOG:<logfile path> 不言自明。
  • /XF 被用来排除某些文件类型,所以它不会花那么长时间

  • 说明:`/MIR`(A 到 B 的镜像)会破坏 A 中不存在的 B 中的任何文件。当您要复制到的目录已经存在并且您希望(B 的)新版本成为A 的完全副本(因为它目前存在)。 (2认同)

web*_*rjn 7

你必须重复这/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"
Run Code Online (Sandbox Code Playgroud)

  • 只要您在排除参数之前**指定源文件夹和目标文件夹,重复 `/XD` 就可以工作,即 `robocopy /XD foo /XD bar source target` 会引发错误(未指定源目录),而 `robocopy source target /XD foo /XD bar` 非常好。 (2认同)

Chr*_*ris 6

我知道这不能回答 OP 的问题,但对于来自 google 的任何人:如果您使用引号,XD 将在作业文件中失败。

坏的:

::
:: Exclude These Directories :
::
    /XD     :: eXclude Directories matching these names
        "Temporary Internet Files"
Run Code Online (Sandbox Code Playgroud)

好的:

::
:: Exclude These Directories :
::
    /XD     :: eXclude Directories matching these names
        Temporary Internet Files
Run Code Online (Sandbox Code Playgroud)

一行接一行地放置尽可能多的排除项,不使用引号(无论是否有空格)。

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