使用 robocopy 复制今天创建或修改的文件

Posted

技术标签:

【中文标题】使用 robocopy 复制今天创建或修改的文件【英文标题】:copy files created or modified today with robocopy 【发布时间】:2018-12-29 17:47:50 【问题描述】:

我正在尝试在 Win7 中创建一个批处理文件,该文件将复制今天创建或修改的所有文件,并将它们复制到具有类似目录结构的目标位置。这是我目前所拥有的:

set today="20180721"
robocopy "C:\temp\" "D:\backup\temp\" *.* /s /DCOPY:T /MINAGE:%today%

我知道 /e 会复制空目录,而 /xf 会排除所有文件,但我不确定这是否对我有帮助。上面的代码似乎不管日期都复制了所有文件,所以我在这里有点迷失了。

【问题讨论】:

以防万一从@Squashman 提供的答案中不清楚,而不是创建变量,您应该能够使用:@RoboCopy "C:\Temp" "D:\Backup\Temp" /S /DCopy:T /MaxAge:1 >Nul forfiles /P "C:\temp" /D -1 /C "cmd /C if @isdir==FALSE (2> nul md @relpath\.. & copy @relpath D:\backup\temp\@relpath)"? (forfiles 只考虑日期,所以它确实复制了今天之前修改的所有文件,而robocopy 复制了 24 小时之前修改的文件) 【参考方案1】:

为变量分配引号不是最佳做法,如果您稍后尝试引用变量,则会导致某些命令出现问题。不管那不是你的问题。您的问题是您需要使用 /MAXAGE 选项。阅读帮助文件,您应该会看到:

/MAXAGE:n : MAXimum file AGE - exclude files older than n days/date.`

所以你的代码应该是:

set "today=20180721"
robocopy "C:\temp\" "D:\backup\temp\" *.* /s /DCOPY:T /MAXAGE:%today%

假设您认为这些选项适用于 INCLUDE。

【讨论】:

【参考方案2】:

robocopy/MINAGE//MAXAGE 选项考虑完整的日期和时间,因此为过去 24 小时内修改的文件指定类似 /MAXAGE:1 的过滤器。

如果您只想处理今天已修改的文件,因此关于日期而不是时间,您可以使用forfiles 及其“/D”选项,如下所示:

set "DEST=D:\backup\temp"
forfiles /P "C:\temp" /D +0 /C "cmd /C if @isdir==FALSE for %%Z in (@relpath) do @(2> nul md 0x22%DEST%\%%~Z\..0x22 & copy @relpath 0x22%DEST%\%%~Z0x22)"

【讨论】:

以上是关于使用 robocopy 复制今天创建或修改的文件的主要内容,如果未能解决你的问题,请参考以下文章

用于将文件复制到 50 多台远程计算机的 Robocopy 命令

robocopy、jungledisk 文件复制问题

使用 robocopy 复制文件(长名称和路径,以及许多空格) - 缺少参数

使用机器人复制和处理进行文件复制

Robocopy 可以与 refs 文件系统配合使用,以提高数据复制和同步的效率和可靠性

CMD用robocopy 怎样不覆盖已存在的文件?