用于备份的Windows批处理脚本

时间:2012-07-10 11:55:02

标签: command-line batch-file backup

我无法弄清楚如何编写仅支持前一天创建或修改的文件的脚本。因此,如果我在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

1 个答案:

答案 0 :(得分:0)

Robocopy为您提供了两种指定日期的选项(maxage,minage,maxlad,minlad) - 相对(n <1900)或固定日期(否则,视为yyyymmdd)。 Full syntax here
您希望包含在给定日期创建或访问的文件,因此您必须使用min / max lad(上次访问日期)和固定日期,因此我们使用robocopy语法指定您的条件:
1。排除昨天以来未使用的文件:use / maxlad(today_date - 1天)
2。排除今天使用的文件:use / minlad(today_date)
将它们放在一起:
robocopy source_dir destination_dir file_spec /maxlad:%today_minus_1% /minlad:%today%

todaytoday_minus_1 vars必须是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)允许使用负数或空格,例如