批量脚本根据当前日期复制数据&修改日期?

时间:2017-02-17 07:11:02

标签: batch-file cmd

我需要每隔2次/月将用户的Outlook数据复制到我的NAS服务器上。用户的第14个和复制文件登录到Windows。

从源复制到NAS服务器。

这是我的想法!

If (current date = 1 or 14) & (date modified at Source <> date modified at Des)
{
do your_batch_file.bat
}
else
   exit

有人能帮助我吗?非常感谢你!

1 个答案:

答案 0 :(得分:0)

wmic os get localdatetime | > nul findstr /b /r /c:"......01" /c:"......14" && (
    robocopy "c:\somewhere" "x:\saveddata" *.pst 
)
  • wmic用于检索本地日期/时间
  • 带有两个正则表达式的
  • findstr用于确定当天是01还是14
  • 如果findstr找到搜索字符串,它将清除errorlevel并且条件运算符&&(如果前一个命令没有失败则执行下一个命令)将执行robocopy
  • robocopy会将更新的文件(默认情况下仅复制已更改的文件)从源复制到目标

但可能最好的选择是声明一个计划任务来处理日期选择并开始复制操作。

已修改以适应评论

@echo off
    setlocal enableextensions disabledelayedexpansion

    rem Check if today we need to do a backup
    wmic os get localdatetime | > nul findstr /b /r /c:"......01" /c:"......14" && (

        rem Check if we have already done the backup
        robocopy "%temp%." "%temp%." flagFile /is /maxage:1 >nul 2>nul && (

            rem  Execute the backup
            robocopy "c:\somewhere" "x:\saveddata" *.pst

            rem And mark the backup as done
            >"%temp%\flagFile" type nul
        )
    )

生成一个标志文件(在temp文件夹中的此示例中)。要确定是否缺少该标志文件,它是旧文件,或者今天已生成,使用robocopy /maxage:1

  • 如果文件不存在,则无法复制,errorlevel为0
  • 如果文件存在,但它是旧文件,则/maxage:1将其从副本中排除,errorlevel为0
  • 如果该文件存在但今天已生成,/maxage:1将不会将其排除,则会选择进行复制,但由于源和目标相同,因此会跳过该文件,errorlevel将是1

因此,条件执行运算符&&(如果前一个命令没有失败,则执行下一个命令)将启动备份并创建标志文件。