使用 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 复制文件(长名称和路径,以及许多空格) - 缺少参数