【问题标题】:copy files created or modified today with robocopy使用 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 小时之前修改的文件)

标签: batch-file windows-7 copy robocopy


【解决方案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)"
    

    【讨论】:

      猜你喜欢
      • 2019-09-01
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 2018-08-15
      相关资源
      最近更新 更多