1

我不知道如何编写脚本来只备份前一天创建或修改的文件。因此,如果我在 25.07 的 15:30 启动脚本,它会在 24.07 00:00 和 25.07 00:00 之间备份文件。如果可能,首选方法是使用 robocopy。我知道 /maxage -1 开关,但它适用于从脚本启动时间开始计算的 1 天前的文件(问题是因为它还包括当天的文件)。

set source="C:\Folder1"
set destination="F:\Folder2"
robocopy %source% %destination% /z /MAXAGE: -1
4

1 回答 1

0

Robocopy 为您提供了两种指定日期的选项(用于 maxage、minage、maxlad、minlad)——相对日期(n<1900)或固定日期(否则,视为 yyyymmdd)。完整的语法在这里
您想包含在给定日期创建或访问的文件,因此您必须使用最小/最大 lad(最后访问日期)和固定日期,所以让我们使用 robocopy 语法指定您的标准:
1. 排除自昨天以来未使用的文件:使用 /maxlad ( today_date - 1 天)
2. 排除今天使用的文件:使用 /minlad (today_date)
将它们放在一起:
robocopy source_dir destination_dir file_spec /maxlad:%today_minus_1% /minlad:%today%

today并且today_minus_1vars 必须是 yyyymmdd 格式的日期(例如 20120710) - 如何获取它们?好吧,如果您仅限于纯批处理,则必须找到脚本来为您计算,有一些可用的(例如,here) 或自己编写。

如果您可以使用 powershell,那非常简单:
for /f %y in ('powershell get-date ^(get-date^).adddays^(-1^) -uformat %Y%m%d') do set today_minus_1=%y让您获得第一个变量和
for /f %t in ('powershell get-date -uformat %Y%m%d') do set today=%t第二个变量。

总结一下:设置您的日期变量,然后运行 ​​robocopy(在排除项中使用它们)。检查它是否正常工作时值得使用/L选项,因为实际副本将重新设置文件的访问时间戳!

给出的所有变量和命令就好像直接从 cmd 行执行一样。如果批量使用,您将需要添加一些%(使用 setlocal 可能是明智的)

注意:我使用的版本(XP010)不允许像您的示例中那样使用负数或空格

于 2012-07-10T16:44:41.367 回答